「vba currentregionの一番下のセルまでの行の高さを変更」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excel VBA(Visual Basic for Applications)で、RangeオブジェクトのCurrentRegionプロパティを使って、アクティブセル領域全体の、行の高さを変更するには、どのようなコードを書けばいいのかを探していた方による検索です。
行の高さはRange.Heightプロパティでは変更できない
以下のようなSubプロシージャを作成して試してみたものの、実行時エラーが発生したのかもしれません。
Sub CurrentRegionの行高を変更する_エラーになる例1()
Range("A1").CurrentRegion.Height = 32
End Sub
上記のマクロを実行すると、
「実行時エラー'424' オブジェクトが必要です。」
というエラーが発生してしまいます。
「オブジェクトが必要です。」
というエラーメッセージですから、行全体を表すRangeオブジェクトを取得するためにRange.EntireRowプロパティを使うということをご存じであれば、以下のようなプロシージャを試したかもしれません。
Sub CurrentRegionの行高を変更する_エラーになる例2()
Range("A1").CurrentRegion.EntireRow.Height = 32
End Sub
上記のマクロでもやっぱり、先ほど同じ実行時エラーが発生します。
オブジェクトブラウザーを確認してみると、下図のとおりRangeオブジェクトのHeightは読み取り専用のプロパティです。
読み取り専用のプロパティであるにも関わらず、値を設定しようとしているために、実行時エラーが発生しているわけです。
CurrentRegionの行高を変更するサンプルマクロ
で、どうすればいいかというと、以下のようなSubプロシージャです。Range("A1").CurrentRegion.RowHeight = 32
End Sub
上記のマクロを実行すると、A1セルのアクティブセル領域の、各行の高さが、32に設定されます。
つまり、行の高さを変更するには、RangeオブジェクトのRowHeightプロパティを使うということです。
Heightプロパティとは何の高さなのか
ではRange.Heightとは何の高さなのか気になる方もいらっしゃるでしょう。
A1:D1セルに適当にデータを入力しておいて、先の動作したマクロを実行して、1:4行目の各行の高さを「32」にしておいてから、以下のマクロを実行してみましょう。
Sub CurrentRegionを確認する()
Dim rng As Range
Set rng = Range("A1").CurrentRegion
Stop
End Sub
Stopステートメントで一時停止したら、ローカルウィンドウでRowHeightとHeightを確認しましょう。
RowHeightは、先のマクロで「32」に設定したので32あたりの数値が表示されているはずです。
これに対してHeightには、「32×4」あたりの数値が表示されるはずです。
つまりRowHeightは各行の高さであるのに対して、Heightはセル領域全体の高さということです。
Home » Excel VBA Rangeオブジェクト » CurrentRegionプロパティ » CurrentRegionの行高を変更するには