VBAで最終行を取得する際に、最終行が結合セルの場合、思い通りに最終行を取得できないということはありませんか?
Excelでセル結合は当たり前に頻繁に行われていることですので、この問題に直面する人は多いはずです。
今回は、結合セルで最終行を取得する方法について説明します。
結合セルで最終行を取得する方法
表の最終行を取得する際に、例えば下のエクセル表のように最終行が結合セルになっていると、上手く最終行を取得できません。
結合されていないセルの場合なら、Cells(Rows.Count, 1).End(xlUp).Row でうまくいきます。
が、このように結合セルになっていると、実行結果は、「7」という結果になってしまいます。
取得したい数値は「10」です。
結論から言うと、Offsetプロパティを使用します。
Offsetプロパティを使う
Offsetプロパティは、指定したセルを基準に、相対的に上下左右に移動した場所にあるセルを参照します。
細かい説明よりも、まずはOffsetを使って行番号「10」を取得することができるサンプルコードをご覧ください。
Sub 最終行()
Dim end_row As Long
end_row = Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row - 1
MsgBox end_row
End Sub
実行すると、メッセージボックスで「10」と表示されます。もちろん、最終行が結合セルじゃない場合でも取得できます。
結合セルで最終行を取得するサンプルコードの解説
最終行を取得するコードを抜粋すると、以下のコードになります。
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row – 1
まず、Offsetプロパティの動作は、
- 指定したセルを基準に、上下左右のセルを取得することができる
- 結合セルを一つのセルとしてカウントする
となっていて、この性質を利用します。
最終行取得の動きは以下の順になります。
- 「Cells(Rows.Count, 1).End(xlUp)」 で最終セルを取得します。
- さらに「 .Offset(1, 0) 」で、最終セルの一つ下のセル「A11」に移動します。
- 「A11」の一つ上のセルを取得したいので、 「 .Row – 1 」で「A11」の行から1を引いた行番号を取得します。
【まとめ】結合セルで最終行を取得する方法
最終行が結合セルになっている表の最終行を取得する方法は、Offsetプロパティを使って、
Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row – 1
と記述すれば最終行を取得することができます。
最終行取得はExcelやVBAで必須マクロなので、ぜひこの機会にマスターしてくださいね。
コメント