和風スパゲティのレシピ

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

行・列全体を取得する - Rows/Columns/Entire

行・列全体をRangeオブジェクトとして取得する方法を解説します。

Rows/Columnsプロパティを使用する方法と、
EntireRow/EntireColumnプロパティを使用する方法があります。

Rows/Columnsプロパティ

基本構文

' 行全体
親シート.Rows(行番号)

' 列全体
親シート.Columns(列番号)

サンプルコード

Dim 対象シート As Worksheet
Set 対象シート = Thisworkbook.Worksheets("○○")

' 第5行を削除する
対象シート.Rows(5).Delete

' E列(第5列)を削除する
対象シート.Columns(5).Delete
    ' または
対象シート.Columns("E").Delete

' C列全体の書式を変更する
対象シート.Columns("C").NumberFormatLocal = "#,##0"

解説

シート.Rows(行番号)、シート.Columns(列番号)という記述で、
行全体・列全体をRangeオブジェクトとして取得することができます。

削除(Delete)/挿入(Insert)など行列に関するメソッドや、
列全体の書式設定などを行う際に使用してください。


列の指定はアルファベット・数値どちらでも可能です。

変数を扱う場合は数値、直接ベタ打ちする場合はアルファベットが使いやすいです。

複数行・複数列を指定する

Rows/Columnsプロパティで複数行/列を指定する場合は、
以下のいずれかの記述を用います。

サンプルとして5~10行目を取得するコードがこちらです。
※ Columnsプロパティも同様の記述ができます。

対象シート.Rows("5:10")
対象シート.Range(対象シート.Rows(5), 対象シートRows(10))
対象シート.Rows(5).Resize(6)

ベタ打ちするのであればシート関数と同様、
Rows("5:10")という「:」を使った指定ができます。


変数で指定する場合など数値を使いたい場合は、
セル範囲を取得するRange(Cells,Cells)形式の応用で、
Range(Rows,Rows)形式で指定することが可能です。


もう一つのやり方として、第1行から○行分を拡張する、
Resizeプロパティを使用する方法もあります。

最終行ではなく行数を持っている場合は、
こちらの記述を使用してください。


C:F列など複数列を取得する(Columnsを使用する)場合は、
以下のサンプルコードのように記述してください。

対象シート.Columns("C:F")
対象シート.Range(対象シート.Columns(3), 対象シートColumns(6))
対象シート.Columns(3).Resize(, 3)

「:」を使用する場合、列ならばアルファベット限定であることに注意してください。

また、Resizeプロパティを使って列方向に拡張する場合は、
指定が第2引数になる点もご注意ください。

EntireRow/EntireColumnプロパティ

続いてEntireプロパティを使用する方法です。

こちらは「起点セル・セル範囲を含む行/列全体を取得」するプロパティで、
たとえばA3:F5から行3:5や列A:Fを取得することができます。

Range("A3:F5").EntireRow ' ← 3~5行を取得
Range("A3:F5").EntireColumn ' ← A:F列を取得

 
こちらはセル範囲を持っている場合にとても便利なプロパティで、
たとえば「オートフィルターの対象列全体をコピー」する場合などに、

Worksheets("○○").AutoFilter.Range.EntireColumn.Copy

このように簡潔にコードを書くことができます。

CurrentRegionやListObject.Rangeなど、
セル範囲を取得しやすい場面ではこちらを活用してください。

Range("5:10")やRange("C:F")は非推奨

上記の方法以外に、Rangeプロパティを使用する方法もあります。

' セル範囲としては同じものを取得します
対象シート.Rows("5:10")
対象シート.Range("5:10")

 
しかし、こちらの方法はVBAが「行全体」と明確に認識しないため、
Countが違う値を返したりPageBreak(改ページ)が動かなかったり、
行・列全体への処理がうまく動かないことが多いです。

Debug.Print Rows("5:10").count ' 6
Debug.Print Range("5:10").count ' 98304 (セル数)

 
行・列全体を指定する際は、Rangeプロパティは使用せず、
Rows/Columns/Entireプロパティを使用してください。