ColumnWidthプロパティ
列の幅の取得や設定にはColumnWidthプロパティを利用します。
列の幅の取得を複数列をまとめて取得する場合、各列の幅が全て同じであれば正しく取得できますが、列ごとに幅が異なる場合はNullが返却されます。その場合は1列ごとに取得する必要があります。
列の幅の設定は1度にまとめて複数の列に対して同じ幅を設定することが可能です。
構文
1 |
Rangeオブジェクト.ColumnWidth |
Rangeオブジェクトにはセル範囲を設定します。Range(“A:B”)のように列全体を選択することも出来ますが、Range(“A1”)のようにセルを指定してもA列に対して列の幅の取得や設定を行うことが可能です。
取得および設定する際の値の単位は標準フォントの1文字分の幅が1になります。プロポーショナルフォントの場合は半角数字の0の幅を1とします。
基本的な設定と取得のサンプルコード
複数列の幅を1度に取得しようとしても、各列の幅を正しく取得できません。
5行目から10行目は同じ幅の複数列を取得し、それ以降は異なる幅の列を複数列取得しています。
前者は同じ幅のためColumnWidthプロパティで取得できますが、後者は正しく取得できず基本的にはNullが返ります。例外として、未保存のBook1などのブックの場合でFomulaArrayプロパティやTextプロパティが””になっている場合はNullではなく選択範囲の一番左の列の高さが返ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub ColumnWidthTest() Dim iColumnWidth '// 1列目に30、2列目に30、と同じ幅を設定 Range("A:A").ColumnWidth = 5 Range("B:B").ColumnWidth = 5 '// 1列目と2列目をまとめて取得すると幅が同じため5を取得 iColumnWidth = Range("A:B").ColumnWidth Debug.Print iColumnWidth '// 1列目に30、2列目に40、と異なる幅を設定 Range("A:A").ColumnWidth = 5 Range("B:B").ColumnWidth = 6 '// 再度1列目と2列目をまとめて取得するとより左の列の幅を取得 iColumnWidth = Range("A:C").ColumnWidth Debug.Print iColumnWidth End Sub |
実行結果
5
Null
複数列の取得のサンプルコード
複数列の幅を取得する場合は各列の幅が同じとは限らないため、1列ずつ取得および設定することになります。
以下は1列目から5列目の幅を列ごとに取得および設定をするサンプルコードです。
注意点として、列全体を表すにはColumnsプロパティを利用する必要があります。
もしループ処理で、For Each r in Selection などと書くと、1列目から5列目の全セルをループすることになり、A1、B1、C1、D1、E1、A2、、、、A1048576、B1048576、C1048576、D1048576、E1048576と時間が掛かることになるため注意しましょう。Columnsプロパティを使えばループ回数は列数と同じで済みます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub GetMultiColumnWidthTest() Dim r As Range '// Rangeオブジェクト Dim iColumnWidth '// 列の幅 Dim i '// ループカウンタ Dim iColumnCount '// 選択範囲の列数 '// 複数列の取得 Range("A:E").Select iColumnCount = Selection.Columns.Count '// 選択範囲の先頭列から最終列までループ For i = 1 To iColumnCount '// 列範囲を取得 Set r = Selection.Columns(i) '// 指定列の幅を取得 iColumnWidth = r.ColumnWidth Debug.Print iColumnWidth '// 指定列の幅を設定 r.ColumnWidth = 5 Selection.Columns(i).ColumnWidth = 5 Next End Sub |