【VBA入門】シート内データの最下行を求める「2つの方法」を使い分ける

Excelワークシート内のデータ件数の求め方。代表的な2つの方法をご紹介。


Excelワークシート内のデータ件数の求め方。代表的な2つの方法をご紹介。

みなさん、こんにちは。セルネッツ竹本です。

今回は、「シート内の最下行の求め方」をテーマに、解説をしたいと思います。

◆代表的な2つの判定方法


‘★[11シート専用] の変数を用意しておく(シート毎に用意、共有はしない)
Public P_11Fin行 As Long
Public P_11Fin列s As String
Public P_11Fin列n As Long
Public P_11Buf範囲 As Variant ’データ範囲をバッファ格納~高速化の秘訣はメモリ処理

‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Sub M_シート内の最下行をGet()
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

'★全データを表示しておく(留意:非表示の行や列があるとバグの原因になる為)
If O_11.AutoFilterMode And O_11.AutoFilter.FilterMode Then O_11.ShowAllData

'★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
'★ 【その1】シート最下行から上方向に向かってデータ検出するFin行
'★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
P_11Fin行 = O_11.Cells(O_11.Rows.Count, 1).End(xlUp).Row
P_11Fin列n = O_11.Cells(1, O_11.Columns.Count).End(xlToLeft).Column 'Fin列基点で左へ
'★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
'★ 【その2】カレント範囲から、最終行・最終列を取得
'★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Dim S_Fin行 As Long
Dim S_Fin列 As Long

'★(A)A1セル起点で選択範囲から取得
S_Fin行 = O_11.Range("A1").CurrentRegion.Item(O_11.Range("A1").CurrentRegion.Count).Row
S_Fin列 = O_11.Range("A1").CurrentRegion.Item(O_11.Range("A1").CurrentRegion.Count).Column

'★Buf格納 「高速化のコツはメモリ処理」データ量に依存するセル操作は10~100倍も遅いため
P_11Buf範囲 = O_11.Range(O_11.Cells(1, 1), O_11.Cells(P_11Fin行, P_11Fin列n))

End Sub

【Point】通常は、【その1】がオーソドックスな方法です。

Excel開発の怖いところは、「ユーザが入力データの状態を変えられる」という点。
それを考慮すると、やるべきことは少なくありません。

今回のテーマは、「シート内の最下行の求め方」について、解説を行いました。

本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。


全国対応!お気軽にお問い合わせください