和風スパゲティのレシピ

日本語でコーディングするExcelVBA

行高・列幅を設定する - RowHeight/ColumnWidth

セルの行高・列幅を設定する方法を解説します。

行高には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に対してしか実行ができないためご注意ください。
(セル・セル範囲からの実行はエラーとなります)

詳しくはこちらの記事をどうぞ。
[準備中]