2019年3月5日火曜日

VBA; 003 列の幅をミリメートル単位で指定する

自分用メモ。
excelでは列の幅指定はフォント依存。標準フォントで半角数字の'0'が何文字表示できるか、というわけのわからん単位なので、これをミリメートル単位で設定する方法。

列の幅はColumnWidthプロパティで設定する。前述のとおり、これがフォントに依存する単位なので、こいつを「ポイント」に変換する。1ポイントは0.35mm。
Widthプロパティはポイント単位の数値なので(統一しろや・・・)これを使う。

ColumnWidth / Width

で、1ポイントが文字単位に換算するといくつになるかがわかる。
ミリメートルをポイントに変換する必要もあるので、これはCentimetersToPointsメソッドを使う。名前の通り単位はセンチメートルなので、ミリメートルに変換するのを忘れない。

  1. Private Sub setColumnWidthByMillimeter(targetRange As Range, targetWidth As Integer)
  2. Dim columnCount As Integer
  3. Dim i As Integer
  4. Dim j As Integer
  5. Dim col As Integer
  6. Dim objectWidth As Double
  7. columnCount = targetRange.Columns.Count - 1
  8. objectWidth = Application.CentimetersToPoints(targetWidth / 10)
  9. For i = 0 To 1
  10. For j = 0 To columnCount
  11. col = targetRange.Column + j
  12. With Columns(col)
  13. .ColumnWidth = objectWidth * (.ColumnWidth / .Width)
  14. End With
  15. Next
  16. Next
  17. End Sub

ColumnWidthでは、複数列の幅を正しく取得できないっぽいので、指定したレンジの範囲で1列ごとに設定する。
また変換誤差が発生するのか、同じ処理をしても1回めと2回めとで結果が変わってしまうのでループで2回設定する。2回めで設定された幅は変わらない模様。

0 件のコメント:

コメントを投稿