2019年3月5日火曜日

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

自分用メモ。
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 件のコメント:

コメントを投稿