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 件のコメント:
コメントを投稿