« VBA サンプル マクロを検索 | トップページ | Excel VBAでセル内での改行 »

2010年1月15日 (金)

セルの高さと幅の設定

セルの縦と横の比 の記事のときに
セルの大きさを思い通りに決めることは
案外難しかったのですが
今回はその続き…

まずは
マイクロソフトサポートオンラインでお勉強。
「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

結果は

Pic20100115a

ここでは、ColumnWidthの単位を
勝手に「文字単位」と言うことにします。

もしかして
ColumnWidth ではなく
Widthの 方を使ったほうが
単位が同じポイントなので
縦と横の比率がわかりやすいのでは?
と考えて width の方を使って
セルの列幅を変更してみる。

Width プロパティで列幅変更コード:

Sub macro100115b()
'Width プロパティで列幅変更

    Range("A1").RowHeight = 20
    Range("A1").Width = 20
   
End Sub

結果は

Pic20100115b

Pic20100115c

ダメです。
確かに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

結果は

Pic20100115d

わかりません!

計算で出したWidthの0.25の差は
まだ理解できる気がしますが
RowHeightとHeightの差はなぜ?
つづく…

|

« VBA サンプル マクロを検索 | トップページ | Excel VBAでセル内での改行 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: セルの高さと幅の設定:

« VBA サンプル マクロを検索 | トップページ | Excel VBAでセル内での改行 »