excelでは列の幅指定はフォント依存。標準フォントで半角数字の'0'が何文字表示できるか、というわけのわからん単位なので、これをミリメートル単位で設定する方法。
列の幅はColumnWidthプロパティで設定する。前述のとおり、これがフォントに依存する単位なので、こいつを「ポイント」に変換する。1ポイントは0.35mm。
Widthプロパティはポイント単位の数値なので(統一しろや・・・)これを使う。
ColumnWidth / Width
で、1ポイントが文字単位に換算するといくつになるかがわかる。
ミリメートルをポイントに変換する必要もあるので、これはCentimetersToPointsメソッドを使う。名前の通り単位はセンチメートルなので、ミリメートルに変換するのを忘れない。
- Private Sub setColumnWidthByMillimeter(targetRange As Range, targetWidth As Integer)
- Dim columnCount As Integer
- Dim i As Integer
- Dim j As Integer
- Dim col As Integer
- Dim objectWidth As Double
-
- columnCount = targetRange.Columns.Count - 1
- objectWidth = Application.CentimetersToPoints(targetWidth / 10)
-
- For i = 0 To 1
- For j = 0 To columnCount
- col = targetRange.Column + j
- With Columns(col)
- .ColumnWidth = objectWidth * (.ColumnWidth / .Width)
- End With
- Next
- Next
- End Sub
ColumnWidthでは、複数列の幅を正しく取得できないっぽいので、指定したレンジの範囲で1列ごとに設定する。
また変換誤差が発生するのか、同じ処理をしても1回めと2回めとで結果が変わってしまうのでループで2回設定する。2回めで設定された幅は変わらない模様。
0 件のコメント:
コメントを投稿