EntireRowとRowプロパティの違い

vbaentireroweyecatch

エクセルVBAでEntireRowとRowプロパティの違いを押さえます。読み方、性格、使い方、複数行の扱い方、基本的メソッドのInsertとDeleteの使い方を説明します。

こんにちは じゅんぱ店長 (@junpa33) です。

ワークシートのセル操作で行に関するプロパティに、「EntireRowプロパティ」「Rowプロパティ」があります。

今回は、この2つのプロパティについて考えていきます。

EntireRowとRow 2つの性格の違いは何?

vbaentirerowrow015

まず始めは、「EntireRow」と「Row」の性格を知って違いを理解しましょう。

「Row」は読み方としては普通に「ロウ」と呼んでください。

「EntireRow」は読み方として「エンタイアロウ」と読みます。多少読み辛いかもしれませんね。

「EntireRow」と「Row」の記述の構文は

単に、記述方法(構文)の視点からだけでは全く違いが分かりません。

EntireRowプロパティの構文

EntireRowの構文

Rangeオブジェクト.EntireRow

Rowプロパティの構文

Rowの構文

Rangeオブジェクト.Row

「EntireRow」と「Row」の戻り値は

「EntireRow」と「Row」の戻り値の違いが、この2つのプロパティの決定的な違いになります。

EntireRowプロパティは戻り値として、行全体を表すRangeオブジェクトを返します。

対して

Rowプロパティは戻り値として行番号を表す整数を返します。

つまり、この戻り値の違いでこんなにも意味が変わってきます。

  • EntirerRowプロパティが返すRangeオブジェクトに対しては、次にどういう働きかけをするかをプロパティやメソッドで指示することが必要です。
  • Rowプロパティが返す数値(整数)に対しては、その値をどう使うか、どこへ持ってゆくかを指示してあげることが必要です。

EntireRowとRowの性格の違い、押さえのポイント

vbaentirerowrow016

EntireRowとRowプロパティの違いで、押さえておくポイントは非常に簡単です。

EntireRowとRow 違いを押さえるポイント

この2つのプロパティの差異は、答えとして返してくるものが『「EntireRowのRangeオブジェクト」と「Rowの数値」という全く範疇の異なる値である。』ということです。

この性格の違いを覚えておけば、EntireRowプロパティとRowプロパティの使い方で迷うことは無いでしょう。

使い方の違い EntireRowプロパティ

vbaentirerowrow017

Entireは英語で「全体」という意味です。

名前の通り「行全体」に作用するプロパティになります。

EntireRowは指定されたセルがある行について、その行全体を選択範囲とするプロパティです。

基本形の使い方

Rangeプロパティでの選択セルB5にEntireRowを働かせる。

5行目全体が選択された。

EntireRowとRowサンプル1
Sub EntireRowとRowサンプル1()
    Range("B5").EntireRow.Select
End Sub
vbaentirerowrow001

連続した複数行に使う

Rangeプロパティでの選択範囲セルB5からC9にEntireRowを働かせる。

5~9行目全体が選択された。

EntireRowとRowサンプル2
Sub EntireRowとRowサンプル2()
    Range("B5:C9").EntireRow.Select
End Sub
vbaentirerowrow002

連続しない複数行に使う

Rangeプロパティでの選択範囲セルB5、A7からA9、B11からC13にEntireRowを働かせる。

5、7~9、11行目全体が選択された。

HTML
Sub EntireRowとRowサンプル3()
    Range("B5,A7:A9,B11:C13").EntireRow.Select
End Sub
vbaentirerowrow003

セル範囲内の一部の行全体を選択する

例えば、データ表のデータ番号セルを指定すればそのデータ行全体を指定できるかを検証してみます。

セルB2からE11な選択範囲の中で上から4行目(相対参照でセルA4として指定)した結果は・・・

EntireRowとRowサンプル4
Sub EntireRowとRowサンプル4()
    Range("B2:E11").Select
    Selection.Range("A4").EntireRow.Select

End Sub
vbaentirerowrow004

RntireRowプロパティでは、選択範囲内だけでの行指定は出来ないことが分かりました。

EntireRowでInsertメソッドとDeleteメソッドを使う

EntireRowプロパティで、取得したRangeオブジェクトにInsertメソッド(挿入)とDeleteメソッド(削除)を行います。

Insertメソッドを使う

セルA4を参照して行挿入を実行します。

EntireRowとRowサンプル6
Sub EntireRowとRowサンプル6()
    Range("B2:E11").Select
    Range("A4").EntireRow.Insert
End Sub
vbaentirerowrow006
セルB2からE11に背景色を黄色にしておく
vbaentirerowrow007
コード実行で背景色の黄色が12行目まで広がった

Deleteメソッドを使う

セルA4を参照して行を削除します。

EntireRowとRowサンプル7
Sub EntireRowとRowサンプル7()
    Range("B2:E11").Select
    Range("A4").EntireRow.Delete
End Sub
vbaentirerowrow006
セルB2からE11に背景色を黄色にしておく
vbaentirerowrow008
コード実行で背景色の黄色が10行目までに縮小した

【参考】EntireRowプロパティとRowsプロパティの一番の違い

EntireRowプロパティはRowsプロパティと同じような機能を持っているように思えます。

記述方法はもちろん違いますが、結果として多くのことがほぼ同じになります。

EntireRowプロパティとRowsプロパティ 重要な機能の違い

  •  記述方法の違い。参照値を指定するのにEntireRowがセル位置であるのに対しRowsは行番号
  •  セルの選択範囲内での特定の行指定。EntirerRowは、選択範囲内の特定行を指定できない。Rowsは可能

②の違いによって、

範囲設定の中の特定の行のデータをクリアする時、例えば「データ表のあるIDのデータを消去する場合」などの場合

EntireRowを使用すると、データ表の行を突き抜けてワークシート上のその行にある、すべてのデータを消去してしまうことになります。

データ表のその行のデータだけを消去したいのであればRowsを使わなければいけません。

この「選択範囲内だけでの行指定」はRowsプロパティを使って行うことが出来ます。

EntireRowとRowサンプル5
Sub EntireRowとRowサンプル5()
    Range("B2:E11").Select
    Selection.Rows(4).Select
End Sub
vbaentirerowrow005

Rowsプロパティとの違いはこの記事で確認することが出来ます。

vbarowseyecatch Rowsプロパティの働きと関連のメソッド

使い方の違い Rowプロパティ

vbaentirerowrow018

Rowプロパティは戻り値として行番号を表す整数を返します。

ですので、基本的に「目的のセルが何行目かを知る」ために使うことになります。

基本形の使い方

Rangeオブジェクトの「セルB5」にRowプロパティを当て、メッセージボックスで値を表示する。

行番号「5」と表示されました。

EntireRowとRowサンプル8
Sub EntireRowとRowサンプル8()
    Range("B5").Select
    MsgBox Range("B5").Row
End Sub
vbaentirerowrow009

セル範囲内にある行で使う

セル範囲(セルB2からE11)内の「セルB5」にRowプロパティを当てる。

セル範囲内での相対参照が適用され行番号は「6」と表示される。

EntireRowとRowサンプル9
Sub EntireRowとRowサンプル9()
    Range("B2:E11").Select
    MsgBox Range("B2:E11").Range("B5").Row
End Sub
vbaentirerowrow010

データのある最終行を知る

数学で言うとピタゴラスに匹敵する、エクセルVBAでの公式的なコードです。丸暗記してもいいぐらいのコードです。

EntireRowとRowサンプル10
Sub EntireRowとRowサンプル10()
    Dim a As Long
    a = Cells(Rows.Count, 2).End(xlUp).Row
    MsgBox a
End Sub
vbaentirerowrow011

セル範囲の使用行番号を知る

範囲内にあるセルを指定して「CurrentRegionプロパティ」で範囲を参照する。

Rowプロパティを当てるとセル範囲の先頭行がわかる。

セル範囲の行数を数えることで、その範囲の使用している総行数を知ることが出来る。

EntireRowとRowサンプル11
Sub EntireRowとRowサンプル11()
    Dim 開始行, 総行数 As Long
        開始行 = Range("B2").CurrentRegion.Row
        総行数 = Range("B2").CurrentRegion.Rows.Count
        MsgBox "開始行 は「" & 開始行 & "」、 総行数 は 「" & 総行数 & "」"
End Sub
vbaentirerowrow012

【参考】書式設定されただけのセル範囲の使用行番号を知る

値の入っていないセル範囲の使用行番号を知る1つの方法です。

vbaentirerowrow006

確認で先ほどの「CurrentRegionプロパティ」で使ったコードを実行してみます。

開始行は「2」総行数は「1」になりました。このコードでは検出できないということです。

vbaentirerowrow013

書式設定済セルをセル範囲として検出できるのは、「UsedRangeプロパティ」

UsedRangeプロパティを使えば、書式設定済(今回はセル背景色の変更)をセル範囲に含めることが出来ます。

ただし検出エリアが、ワークシート全体になるので注意が必要です。

開始行と総行数を調べます。

EntireRowとRowサンプル12
Sub EntireRowとRowサンプル12()
    Dim 開始行, 総行数 As Long
        開始行 = ActiveSheet.UsedRange.Row
        総行数 = ActiveSheet.UsedRange.Rows.Count
        MsgBox "開始行 は「" & 開始行 & "」、 総行数 は 「" & 総行数 & "」"
End Sub

開始行は2行目、総行数は10行と表示されました。

vbaentirerowrow014

UsedRangeプロパティはこの記事で詳細を説明しています。

vbausedrangeeyecatch UsedRangeプロパティの使い方のコツ

EntireRowとRowプロパティの違いを押さえる まとめ

vbaentirerowrow019

「EntireRow」と「Row」の戻り値の違いが、この2つのプロパティの決定的な違いです。

つまり、利用する用途が全く違うということです。

それぞれ重要なプロパティですので、使い方とその特徴をしっかり覚えておきましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。