エクセルVBAでEntireRowとRowプロパティの違いを押さえます。読み方、性格、使い方、複数行の扱い方、基本的メソッドのInsertとDeleteの使い方を説明します。
こんにちは じゅんぱ店長 (@junpa33) です。
ワークシートのセル操作で行に関するプロパティに、「EntireRowプロパティ」「Rowプロパティ」があります。
今回は、この2つのプロパティについて考えていきます。
- セルの範囲選択
- Range VS Cells !VBAで使えるのはどっち
- セルの範囲選択と設定は14のツールで対応する
- Rowsプロパティの働きと関連のメソッド
- Columnsプロパティでセルの列を指定する
- EntireRowとRowプロパティの違い
- EntireColumnとColumnの使い方
- Offsetプロパティは指定範囲を移動させる
- Resizeプロパティでセル範囲をサイズ変更
- CurrentRegionは連続データをまとめて掴む
- UnionとRangeの一括選択の働きを比較
- SpecialCellsメソッドはセル検索し選択する
- UsedRangeプロパティの使い方のコツ
- Endプロパティで上下左右の最終セルを取得
- データ入力済セルの最終行番号を取得する
コンテンツ
EntireRowとRow 2つの性格の違いは何?
まず始めは、「EntireRow」と「Row」の性格を知って違いを理解しましょう。
「Row」は読み方としては普通に「ロウ」と呼んでください。
「EntireRow」は読み方として「エンタイアロウ」と読みます。多少読み辛いかもしれませんね。
「EntireRow」と「Row」の記述の構文は
単に、記述方法(構文)の視点からだけでは全く違いが分かりません。
EntireRowプロパティの構文
Rangeオブジェクト.EntireRow
Rowプロパティの構文
Rangeオブジェクト.Row
「EntireRow」と「Row」の戻り値は
「EntireRow」と「Row」の戻り値の違いが、この2つのプロパティの決定的な違いになります。
EntireRowプロパティは戻り値として、行全体を表すRangeオブジェクトを返します。
対して
Rowプロパティは戻り値として行番号を表す整数を返します。
つまり、この戻り値の違いでこんなにも意味が変わってきます。
- EntirerRowプロパティが返すRangeオブジェクトに対しては、次にどういう働きかけをするかをプロパティやメソッドで指示することが必要です。
- Rowプロパティが返す数値(整数)に対しては、その値をどう使うか、どこへ持ってゆくかを指示してあげることが必要です。
EntireRowとRowの性格の違い、押さえのポイント
EntireRowとRowプロパティの違いで、押さえておくポイントは非常に簡単です。
この性格の違いを覚えておけば、EntireRowプロパティとRowプロパティの使い方で迷うことは無いでしょう。
使い方の違い EntireRowプロパティ
Entireは英語で「全体」という意味です。
名前の通り「行全体」に作用するプロパティになります。
EntireRowは指定されたセルがある行について、その行全体を選択範囲とするプロパティです。
基本形の使い方
Rangeプロパティでの選択セルB5にEntireRowを働かせる。
5行目全体が選択された。
Sub EntireRowとRowサンプル1()
Range("B5").EntireRow.Select
End Sub
連続した複数行に使う
Rangeプロパティでの選択範囲セルB5からC9にEntireRowを働かせる。
5~9行目全体が選択された。
Sub EntireRowとRowサンプル2()
Range("B5:C9").EntireRow.Select
End Sub
連続しない複数行に使う
Rangeプロパティでの選択範囲セルB5、A7からA9、B11からC13にEntireRowを働かせる。
5、7~9、11行目全体が選択された。
Sub EntireRowとRowサンプル3()
Range("B5,A7:A9,B11:C13").EntireRow.Select
End Sub
セル範囲内の一部の行全体を選択する
例えば、データ表のデータ番号セルを指定すればそのデータ行全体を指定できるかを検証してみます。
セルB2からE11な選択範囲の中で上から4行目(相対参照でセルA4として指定)した結果は・・・
Sub EntireRowとRowサンプル4()
Range("B2:E11").Select
Selection.Range("A4").EntireRow.Select
End Sub
RntireRowプロパティでは、選択範囲内だけでの行指定は出来ないことが分かりました。
EntireRowでInsertメソッドとDeleteメソッドを使う
EntireRowプロパティで、取得したRangeオブジェクトにInsertメソッド(挿入)とDeleteメソッド(削除)を行います。
Insertメソッドを使う
セルA4を参照して行挿入を実行します。
Sub EntireRowとRowサンプル6()
Range("B2:E11").Select
Range("A4").EntireRow.Insert
End Sub
Deleteメソッドを使う
セルA4を参照して行を削除します。
Sub EntireRowとRowサンプル7()
Range("B2:E11").Select
Range("A4").EntireRow.Delete
End Sub
【参考】EntireRowプロパティとRowsプロパティの一番の違い
EntireRowプロパティはRowsプロパティと同じような機能を持っているように思えます。
記述方法はもちろん違いますが、結果として多くのことがほぼ同じになります。
- 記述方法の違い。参照値を指定するのにEntireRowがセル位置であるのに対しRowsは行番号
- セルの選択範囲内での特定の行指定。EntirerRowは、選択範囲内の特定行を指定できない。Rowsは可能
②の違いによって、
範囲設定の中の特定の行のデータをクリアする時、例えば「データ表のあるIDのデータを消去する場合」などの場合
EntireRowを使用すると、データ表の行を突き抜けてワークシート上のその行にある、すべてのデータを消去してしまうことになります。
データ表のその行のデータだけを消去したいのであればRowsを使わなければいけません。
この「選択範囲内だけでの行指定」はRowsプロパティを使って行うことが出来ます。
Sub EntireRowとRowサンプル5()
Range("B2:E11").Select
Selection.Rows(4).Select
End Sub
Rowsプロパティとの違いはこの記事で確認することが出来ます。
Rowsプロパティの働きと関連のメソッド使い方の違い Rowプロパティ
Rowプロパティは戻り値として行番号を表す整数を返します。
ですので、基本的に「目的のセルが何行目かを知る」ために使うことになります。
基本形の使い方
Rangeオブジェクトの「セルB5」にRowプロパティを当て、メッセージボックスで値を表示する。
行番号「5」と表示されました。
Sub EntireRowとRowサンプル8()
Range("B5").Select
MsgBox Range("B5").Row
End Sub
セル範囲内にある行で使う
セル範囲(セルB2からE11)内の「セルB5」にRowプロパティを当てる。
セル範囲内での相対参照が適用され行番号は「6」と表示される。
Sub EntireRowとRowサンプル9()
Range("B2:E11").Select
MsgBox Range("B2:E11").Range("B5").Row
End Sub
データのある最終行を知る
数学で言うとピタゴラスに匹敵する、エクセルVBAでの公式的なコードです。丸暗記してもいいぐらいのコードです。
Sub EntireRowとRowサンプル10()
Dim a As Long
a = Cells(Rows.Count, 2).End(xlUp).Row
MsgBox a
End Sub
セル範囲の使用行番号を知る
範囲内にあるセルを指定して「CurrentRegionプロパティ」で範囲を参照する。
Rowプロパティを当てるとセル範囲の先頭行がわかる。
セル範囲の行数を数えることで、その範囲の使用している総行数を知ることが出来る。
Sub EntireRowとRowサンプル11()
Dim 開始行, 総行数 As Long
開始行 = Range("B2").CurrentRegion.Row
総行数 = Range("B2").CurrentRegion.Rows.Count
MsgBox "開始行 は「" & 開始行 & "」、 総行数 は 「" & 総行数 & "」"
End Sub
【参考】書式設定されただけのセル範囲の使用行番号を知る
値の入っていないセル範囲の使用行番号を知る1つの方法です。
確認で先ほどの「CurrentRegionプロパティ」で使ったコードを実行してみます。
開始行は「2」総行数は「1」になりました。このコードでは検出できないということです。
UsedRangeプロパティを使えば、書式設定済(今回はセル背景色の変更)をセル範囲に含めることが出来ます。
ただし検出エリアが、ワークシート全体になるので注意が必要です。
開始行と総行数を調べます。
Sub EntireRowとRowサンプル12()
Dim 開始行, 総行数 As Long
開始行 = ActiveSheet.UsedRange.Row
総行数 = ActiveSheet.UsedRange.Rows.Count
MsgBox "開始行 は「" & 開始行 & "」、 総行数 は 「" & 総行数 & "」"
End Sub
開始行は2行目、総行数は10行と表示されました。
UsedRangeプロパティはこの記事で詳細を説明しています。
UsedRangeプロパティの使い方のコツEntireRowとRowプロパティの違いを押さえる まとめ
「EntireRow」と「Row」の戻り値の違いが、この2つのプロパティの決定的な違いです。
つまり、利用する用途が全く違うということです。
それぞれ重要なプロパティですので、使い方とその特徴をしっかり覚えておきましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。