エクセルVBAで、データ入力したセルの終端を調べるという作業が良くあります。
最終行番号を取得するためにも、Endプロパティで最終セルを取得する必要があります。
こんにちは じゅんぱ店長 (@junpa33) です。
エクセルVBAでプログラムを組み立てる時に、ほぼ必ず使用するんじゃないかな?というコードで、
ワークシート上で、使用しているセルの最終端を取得する(掴む)ためのコードがあります。
データ入力の最終行番号を取得するコードもその1つです。
この最終端を掴むためのコードのKEYとなるプロパティが「Endプロパティ」です。
今回はこの「Endプロパティ」についての話です。
ちなみに「Endステートメント」というものもあります。こちらは「同名の別人」ですので、間違わないでください。「同名の別人」は改めてまた別記事で紹介させていただきます。
- セルの範囲選択
- Range VS Cells !VBAで使えるのはどっち
- セルの範囲選択と設定は14のツールで対応する
- Rowsプロパティの働きと関連のメソッド
- Columnsプロパティでセルの列を指定する
- EntireRowとRowプロパティの違い
- EntireColumnとColumnの使い方
- Offsetプロパティは指定範囲を移動させる
- Resizeプロパティでセル範囲をサイズ変更
- CurrentRegionは連続データをまとめて掴む
- UnionとRangeの一括選択の働きを比較
- SpecialCellsメソッドはセル検索し選択する
- UsedRangeプロパティの使い方のコツ
- Endプロパティで上下左右の最終セルを取得
- データ入力済セルの最終行番号を取得する
コンテンツ
Endプロパティの記述方法
Endプロパティは、データが入力されている範囲の終端セルを取得します。
Endプロパティはデータ入力の最終行番号を取得するためによく出てきますが、
Endプロパティは戻り値としてRangeオブジェクトを返しますので、
行番号取得だけではなくて、色々な関連プロパティを使用することが出来ます。
(例えば、これからの説明では、取得したRangeオブジェクトに背景色を設定します。)
- Rangeオブジェクト.End(処理方向)
処理方向 | 説明 | 記述方法 |
---|---|---|
xlUp | シート最下端行から上方向へ | End(xlUp) |
xlDown | 始点セルから下方向へ | End(xlDown) |
xlToLeft | シート最右端列から左方向へ | End(xlToLeft) |
xlToRight | 始点セルから右方向へ | End(xlToRight) |
Endプロパティで上下左右の最終セルを掴む
xlUpとxlDownでの上下方向での最終行と、xlToLeftとxlToRightでの左右方向での最終列の掴み方を分けて説明していきます。
上下の最終セル(最終行)を掴む
サンプルとしてデータが書かれたこのワークシートを使います。
xlUp(上方向)を使ってデータ入力の最終セルを掴む
ワークシートの最終行から上方向に、データが入力されているセルをカウントダウンで見つけに行きます。
(上方向)A列に対してデータ入力の最終セルを見つけます。
見つけた最終セルは背景色を「黄色」に着色します。
Sub Endプロパティサンプル1_1()
Cells(Rows.Count, 1).End(xlUp).Interior.Color = RGB(255, 255, 0)
End Sub
行番号を取得する場合はコードをこのように記述します。
「 Cells(Rows.Count, 1).End(xlUp).Row 」
(上方向)B列に対してデータ入力の最終セルを見つけます。
見つけた最終セルは背景色を「緑色」に着色します。
セルにデータが入っているかどうかを判断するので、
罫線が引かれているかどうか(書式設定されているかどうか)には無反応です。
Sub Endプロパティサンプル1_2()
Cells(Rows.Count, 2).End(xlUp).Interior.Color = RGB(0, 255, 0)
End Sub
xlDown(下方向)を使ってデータ入力の最終セルを掴む
開始点となるセルをどこにセットするかで、結果が大きく変わります。
(下方向)A列に対してデータ入力の最終セルを見つけます。
A列の始点セルとして セルA1 [ Cells(1,1) ] を指定します。
見つけた最終セルは背景色を「青色」に着色します。
Sub Endプロパティサンプル2_1()
Cells(1, 1).End(xlDown).Interior.Color = RGB(0, 0, 255)
End Sub
行番号を取得する場合はコードをこのように記述します。
「 Cells(1, 1).End(xlDown).Row 」
このA列の場合は、上方向「xlUp」でも下方向「xlDown」でも同じ結果を得ることが出来ました。
これが一番の基本形になります。
(下方向)B列に対してデータ入力の最終セルを見つけます。
B列の場合は、始点セルをどこに設定するかで、結果が違ってきます。
見つけた最終セルは背景色を「赤色」に着色します。
始点セルが空白セルであった場合は、はじめてのデータ入力セルと出会うところでストップします。
Sub Endプロパティサンプル2_2a()
Cells(1, 2).End(xlDown).Interior.Color = RGB(255, 0, 0)
End Sub
見つけた最終セルは背景色を「紫色」に着色します。
セルB3を始点とすると狙い通りの位置のセルを掴むことが出来ました。
Sub Endプロパティサンプル2_2b()
Cells(3, 2).End(xlDown).Interior.Color = RGB(255, 0, 255)
End Sub
最終行の行番号を知る時は、同様にこのコードで知ることが出来ます。
Sub Endプロパティサンプル2_2c()
MsgBox Cells(3, 2).End(xlDown).Row
End Sub
このコードはメッセージボックスで表示させるパターンです。
(下方向)C列に対してデータ入力の最終セルを見つけます。
C列の場合は途中の行にデータの空白がある場合です。
そのデータの空白が、「何も入れていない空」なのか「=””」や「スペース」なのかで結果が違ってきます。
Sub Endプロパティサンプル2_2d()
Cells(3, 3).End(xlDown).Interior.Color = RGB(0, 255, 255)
End Sub
データの切れ目として空白セルを検知して途中でストップしました。
空白が入力されたデータとして認識され、目的の最終セルを取得することが出来ました。
左右の最終セル(最終列)を掴む
xlToLeft(左方向)を使ってデータ入力の最終セルを掴む
ワークシートの最終列から左方向に、データが入力されているセルを見つけに行きます。
言葉の表現が難しいですが、
「シート最右端列から左方向に調べてセル範囲の一番右にあるセルを検出する」
という意味です。
(左方向)1行目に対してデータ入力の最終セルを見つけます。
見つけた最終セルは背景色を「黄色」に着色します。
Sub Endプロパティサンプル3_1()
Cells(1, Columns.Count).End(xlToLeft).Interior.Color = RGB(255, 255, 0)
End Sub
列番号を取得する場合はコードをこのように記述します。
「 Cells(1, Columns.Count).End(xlToLeft).Column 」
(左方向)3行目に対してデータ入力の最終セルを見つけます。
見つけた最終セルは背景色を「緑色」に着色します。
セルにデータが入っているかどうかを判断するので、
罫線が引かれているかどうか(書式設定されているかどうか)には無反応です。
Sub Endプロパティサンプル3_2()
Cells(3, Columns.Count).End(xlToLeft).Interior.Color = RGB(0, 255, 0)
End Sub
xlToRight(右方向)を使ってデータ入力の最終セルを掴む
開始点となるセルをどこにセットするかで、結果が変わります。
(右方向)1行目に対してデータ入力の最終セルを見つけます。
1行目の始点セルとして セルA1 [ Cells(1,1) ] を指定します。
見つけた最終セルは背景色を「青色」に着色します。
Sub Endプロパティサンプル4_1()
Cells(1, 1).End(xlToRight).Interior.Color = RGB(0, 0, 255)
End Sub
列番号を取得する場合はコードをこのように記述します。
「 Cells(1, 1).End(xlToRight).Column 」
このA列の場合は、左方向「xlToLeft」でも右方向「xlToRight」でも同じ結果を得ることが出来ました。
これが一番の基本形になります。
(右方向)2行目に対してデータ入力の最終セルを見つけます。
2列目の場合は、始点セルをどこに設定するかで、結果が違ってきます。
見つけた最終セルは背景色を「赤色」に着色します。
Sub Endプロパティサンプル4_2a()
Cells(2, 1).End(xlToRight).Interior.Color = RGB(255, 0, 0)
End Sub
最終行を掴むときと同様に、始点セルが空白セルであった場合は、はじめてのデータ入力セルと出会うところでストップします。
見つけた最終セルは背景色を「紫色」に着色します。
Sub Endプロパティサンプル4_2b()
Cells(2, 2).End(xlToRight).Interior.Color = RGB(255, 0, 255)
End Sub
セルB2を始点とすると狙い通りの位置のセルを掴むことが出来ました。
(右方向)4行目に対してデータ入力の最終セルを見つけます。
6行目の場合は途中の行にデータの空白がある場合です。
そのデータの空白が、「何も入れていない空」なのか「=””」や「スペース」なのかで結果が違ってきます。
Sub Endプロパティサンプル4_2c()
Cells(4, 1).End(xlToRight).Interior.Color = RGB(0, 255, 255)
End Sub
データの切れ目として空白セルを検知して途中でストップしました。
空白が入力されたデータとして認識され、目的の最終セルを取得することが出来ました。
xlToRight(右方向)を使った時の始点と空白セルの関係を考察する
xlToRight(右方向)を使った場合の始点セルの扱い(認識)と空白セルの扱いには注意が必要です。
下のサンプルで、A列を始点とした場合に
「2行目」、「4行目」と「6行目」ではEndプロパティがどのように反応するでしょうか?
Endプロパティが示すセルの背景色を青色にします。
Sub Endプロパティサンプル5_1()
Cells(2, 1).End(xlToRight).Interior.Color = RGB(0, 125, 255)
End Sub
Endプロパティが示すセルの背景色を黄緑色にします。
Sub Endプロパティサンプル5_2()
Cells(4, 1).End(xlToRight).Interior.Color = RGB(125, 255, 0)
End Sub
Endプロパティが示すセルの背景色を青紫色にします。
Sub Endプロパティサンプル5_3()
Cells(6, 1).End(xlToRight).Interior.Color = RGB(125, 0, 255)
End Sub
3つのコードを実行するとこのようになります。
すべて同じC列を示しました。
- 2行目はセルD2の空白セルを感知して、セルC2でSTOPしました。
- 4行目はセルB4の空白セルを感知して、セルC4でストップしました。
- 6行目はセルB6の空白セルを感知して、セルC6でストップしました。
つまり、始点セルの次のセルが
- 空白でなかった場合は、初めて見つけた空白セルの手前のデータ入力セルでストップします。
- 空白であった場合は、次のはじめてのデータ入力セルでストップします。
xldownについても同様です。
Endプロパティで最終セルを掴む まとめ
データの新規入力は、多くの場合は行の上から下へ、列の左から右へということですので、
Endプロパティを利用する時は、
ワークシートの最終行から上方向へ、最終列から左方向へという使い方が中心になると思います。
そういう意味では、「xlToRight」と「xlDown」は知っておく程度で良いのかもしれません。
いずれにしても、EndプロパティはエクセルVBAで重要なコードですので、しっかり使えるようになっておきましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。