セルの行高・列幅を設定する方法を解説します。
行高にはRangeオブジェクトのRowHeightプロパティ、
列幅にはRangeオブジェクトのColumnWidthプロパティを使用します。
行高・列幅を設定する
基本構文
' 行高の設定 行全体を指すRangeオブジェクト.RowHeight = 設定値 ' 列幅の設定 列全体を指すRangeオブジェクト.ColumnWidth = 設定値
サンプルコード
' 行高の設定(どちらでもOK) Rows(10).RowHeight = 21 Range("A10").RowHeight = 21 ' 列幅の設定 Columns(5).ColumnWidth = 12 Range("E10").ColumnWidth = 12 ' 複数行の行高を一括設定(5~20行目) Rows("5:20").RowHeight = 21 Range(Rows(5), Rows(20)).RowHeight = 21 Range("A5:A20").RowHeight = 21 ' 表の行高を一括設定 Worksheets("○○").AutoFilter.Range.RowHeight = 21 Worksheets("○○").ListObject(1).Range.RowHeight = 21 Worksheets("○○").Range("A1").CurrentRegion.RowHeight = 21 ' すべての行・列の行高・列幅を一括設定する Worksheets("○○").Cells.RowHeight = 21 Worksheets("○○").Cells.ColumnWidth = 12
解説
行高・列幅を設定するには、
RangeオブジェクトのRowHeight/ColumnWidthを使用します。
設定値はピクセル単位ではなく、

この左の数値を設定します。
この数値は行はポイント、列は文字数となっているようで、
両者はちがう縮尺のため、同値にしても正方形にはなりません。
RowHeight/ColumnWidthは行列全体を設定する機能ですが、
単独セルやセル範囲からでも実行が可能です。
似たプロパティである行列の非表示「Hidden」とは違い、
EntireRow/Columnを使って行/列全体にする必要はありません。
Range("A10").RowHeight = 21 ' ← OK Range("A10").Hidden = False ' ← エラー Range("A10").EntireRow.Hidden = False ' ← Hiddenはこうする必要あり
また、この処理は飛び飛びの行・列に対しても実行が可能です。
Range("A10,A12,A14").RowHeight = 21 ' ← OK
このようにRowHeight/ColumnWidthはエラーになりづらいプロパティですが、行高の最大409ポイント、列幅の最大255文字を超えた場合は、
| 実行時エラー '1004': Range クラスの RowHeight プロパティを設定できません。 |
| 実行時エラー '1004': Range クラスの ColumnWidth プロパティを設定できません。 |
このエラーとなります。
最大値を超過する以外にも、負の値でもこちらのエラーとなります。
行高・列幅を読み取る/他の行・列へ反映する
RowHeight/ColumnWidthはプロパティですので、
当然読み取ることも可能です。
Dim 行高 As Double 行高 = Range("A1").RowHeight MsgBox 行高 ' 1行目の行高が表示されます。初期値なら16.5
この仕様を利用し、2行目の行高を1行目と同じにするには、
Rows(2).RowHeight = Rows(1).RowHeight
こちらのコードでOKです。
例えばオートフィルター内の行高を第1行と同じにする場合は、
' フィルター範囲から見出しを除外したRangeを取得 Dim データエリア As Range Set データエリア = Worksheets("○○").AutoFilter.Range Set データエリア = データエリア.Offset(1).Resize(データエリア.Rows.Count - 1) データエリア.RowHeight = データエリア.Rows(1).RowHeight
このコードで実行が可能です。
行高のコピー(1行目の行高を全行へ反映)したいときは、
この簡単な記述で実行できることを覚えておきましょう。
セル範囲.RowHeight = セル範囲.Rows(1).RowHeight
列幅も同様です。
セル範囲.ColumnWidth = セル範囲.Columns(1).ColumnWidth
なお、行高・列幅を複数の行・列から読み取った場合は、
- すべての行・列の設置値が同じであればその値
- ひとつでも違う行高・列幅が混じっている場合はNull
を取得します。
複数行の行高を別の行に反映しようとした際、
行高が統一されていない(Null)場合はエラーになるためご注意ください。
逆に言えば、すべての行・列が同じ行高・列幅かどうかは、
RowHeight/ColumnWidthがNullかを調べて判定が可能です。
行高・列幅を自動調整する
行高・列幅をそのセルの値に合わせて自動調整したい場合は、
AutoFitメソッドを使用します。
' 行高を自動設定 Rows("5:20").AutoFit Range(Rows(5), Rows(20)).AutoFit Range("A5:A20").EntireRow.AutoFit ' 列幅を自動設定 Columns("5:20").AutoFit Range(Columns(5), Column(20)).AutoFit Range("A5:A20").EntireColumn.AutoFit
こちらはRowHeight/ColumnWidthプロパティとは違い、
行・列を表すRangeに対してしか実行ができないためご注意ください。
(セル・セル範囲からの実行はエラーとなります)
詳しくはこちらの記事をどうぞ。
[準備中]