セルの縦と横の比 の記事のときに
セルの大きさを思い通りに決めることは
案外難しかったのですが
今回はその続き…
まずは
マイクロソフトサポートオンラインでお勉強。
「Excel で列の幅が決定されるしくみについて」
とりあえず
現在の標準フォント
サイズ
標準の列幅(標準フォントの半角 8.38 文字)
標準の行の高さ
について調べます。
標準フォント,サイズ,列幅,行の高さ表示コード:Sub macro100115a() '標準フォントとサイズ Sheets.Add Dim i, j As Integer i = 2 j = 2 Cells(i, j) = "StandardFont" Cells(i, j + 1) = Application.StandardFont i = i + 1 Cells(i, j) = "StandardFontSize" Cells(i, j + 1) = Application.StandardFontSize Cells(i, j + 2) = "ポイント単位" i = i + 2 Cells(i, j) = "RowHeight" Cells(i, j + 1) = Range("A1").RowHeight Cells(i, j + 2) = "ポイント単位" i = i + 1 Cells(i, j) = "Height" Cells(i, j + 1) = Range("A1").Height Cells(i, j + 2) = "ポイント単位" i = i + 2
Cells(i, j) = "ColumnWidth" Cells(i, j + 1) = Range("A1").ColumnWidth Cells(i, j + 2) = "1文字単位" i = i + 1 Cells(i, j) = "Width" Cells(i, j + 1) = Range("A1").Width Cells(i, j + 2) = "ポイント単位" Columns("B:D").EntireColumn.AutoFit End Sub |
結果は
ここでは、ColumnWidthの単位を
勝手に「文字単位」と言うことにします。
もしかして
ColumnWidth ではなく
Widthの 方を使ったほうが
単位が同じポイントなので
縦と横の比率がわかりやすいのでは?
と考えて width の方を使って
セルの列幅を変更してみる。
Width プロパティで列幅変更コード:Sub macro100115b() 'Width プロパティで列幅変更
Range("A1").RowHeight = 20 Range("A1").Width = 20 End Sub |
結果は
ダメです。
確かにVBAヘルプの Height プロパティの頁には
「Range オブジェクトの場合は、値の取得のみ可能」
とあったが
Width プロパティの方にはなかったはず…
仕方ないので
また、比率を使います。
今回は手動なしでやりたいです。
列幅、行高さ共にポイント単位で指定します。
最初のコードの結果である
ClumnWidth と Width の比
8.38 : 54 をマクロで取得します。
シートを挿入して変更をしていない状態で
S_ColumnWidth = Range("A1").ColumnWidth
S_Width = Range("A1").Width
これを使って
ポイント単位で指定した列幅を
文字単位にします。
L(指定した列幅)* S_ColumnWidth / S_Width
が変換式です。
試しに1辺50ポイントの正方形にしてみる。
1辺50ポイント(=L )の正方形にしてみるコード:Sub macro100115c() '標準の行の高さ、列幅を取得 Sheets.Add Dim S_ColumnWidth, S_Width As Single S_ColumnWidth = Range("A1").ColumnWidth S_Width = Range("A1").Width '1辺の長さをLで指定 Dim L As Integer L = 50 Range("A1").RowHeight = L Range("A1").ColumnWidth = L * S_ColumnWidth / S_Width Dim i, j As Integer i = 2 j = 2 Cells(i, j) = "StandardFont" Cells(i, j + 1) = Application.StandardFont i = i + 1 Cells(i, j) = "StandardFontSize" Cells(i, j + 1) = Application.StandardFontSize Cells(i, j + 2) = "ポイント単位" i = i + 2 Cells(i, j) = "RowHeight" Cells(i, j + 1) = Range("A1").RowHeight Cells(i, j + 2) = "ポイント単位" i = i + 1 Cells(i, j) = "Height" Cells(i, j + 1) = Range("A1").Height Cells(i, j + 2) = "ポイント単位" i = i + 2
Cells(i, j) = "ColumnWidth" Cells(i, j + 1) = Range("A1").ColumnWidth Cells(i, j + 2) = "1文字単位" i = i + 1 Cells(i, j) = "Width" Cells(i, j + 1) = Range("A1").Width Cells(i, j + 2) = "ポイント単位" Columns("B:D").EntireColumn.AutoFit End Sub |
結果は
わかりません!
計算で出したWidthの0.25の差は
まだ理解できる気がしますが
RowHeightとHeightの差はなぜ?
つづく…
コメント