
Excelワークシート内のデータ件数の求め方。代表的な2つの方法をご紹介。
みなさん、こんにちは。セルネッツ竹本です。
今回は、「シート内の最下行の求め方」をテーマに、解説をしたいと思います。
データ取込マクロの改善
最終行の取り違えで、データが欠けていませんか
- 空白行があると途中までしか読み込まれない
- フィルター中のシートで件数が合わない
- 大量データのセル操作が遅く応答なしになる
そのお悩み、取込・集計マクロの改修で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、最終行の正しい判定、実行前のフィルター解除、配列を使った高速処理を組み込みます。入力状態に左右されにくいマクロに整えます。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
◆代表的な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実務の効率化において、ご参考お役立てになれば幸いです。
相見積もり歓迎
自作マクロの改修・引き継ぎもご相談ください
- 作業単価は基本料金50,000円+時間単価
- 集計レポートは12万円〜(税別・基本料金込み)
- セカンド・オピニオンも60分無料
自作や前任者のマクロの改修は、基本料金50,000円+時間単価(開発10,000円/時・税別)でお見積もりします。新しく作る場合は集計レポート12万円〜が目安です。相見積もりも歓迎です。Excelに向かない場合は正直にお伝えします。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料