ワークシートのナビゲーション
メニューを表示するにはスワイプしてください
実際のデータには、どこで終わるかを示すラベルはありません。Range("A1:I5") のように範囲をハードコーディングすると、注文が6件目になった瞬間に動作しなくなります。そのため、シートにデータの終わりを尋ねる必要があります。
最終行の取得
このコース全体で最もよく使われるコード行:
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
このコードは右から左に読みます:列Aの一番下(ws.Rows.Count)から始め、上方向(End(xlUp))にジャンプして最初にデータが入っているセルに到達し、その行番号を返します。注文数がいくつあっても機能します。
最終列の取得
同じ方法ですが、横方向です:
Dim lastCol As Long
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
UsedRange
シート上でこれまでにデータが入力された矩形範囲全体を報告する機能。簡単な確認には便利ですが、注意が必要です。内容を削除したセルも記憶しているため、実際のデータ範囲より広く報告される場合があります。
Debug.Print ws.UsedRange.Address ' e.g. $A$1:$I$6
Debug.Print ws.UsedRange.Rows.Count ' 6
CurrentRegion
通常はこちらの方が適切なツールです。単一セルから周囲の連続したデータブロックまで外側に拡張し、最初の空白行または空白列で停止します。Ordersのような整然としたテーブルに正確に一致します。
Dim tableRange As Range
Set tableRange = ws.Range("A1").CurrentRegion
Debug.Print tableRange.Address ' $A$1:$I$6
Debug.Print tableRange.Rows.Count - 1 ' 5 — subtract 1 to exclude the header
課題
Subメソッドを使って最後の行を見つけ、イミディエイトウィンドウに出力するEnd(xlUp)を作成してください。- 同じ
Sub内で、CurrentRegion.Rows.Countを使った別の方法でも最後の行を取得し、同様に出力してください。両者が一致することを確認します。 - シートの7行目に6件目の注文を手動で追加し、マクロを再実行して、どちらの方法でも7が報告されることを確認してください(コードの変更は不要)。
ヒント
1. End(xlUp) を使った最終行の検索
- 列Aの一番下から上方向へジャンプ — 第3章「最終行の検索」セクションと同じパターン。
Debug.Printで結果をイミディエイトウィンドウ(Ctrl+G)に表示。
2. CurrentRegion を使った別の方法
CurrentRegionは、単一セル(例:Range("A1"))から連続したデータブロック全体に拡張。- その領域の
.Rows.Countはヘッダー行も含む — データ行のみが必要な場合は1を引くことに注意(本章の注意参照)。今回は2つの方法を比較するだけなので、まずは生のカウントを出力し、その後ヘッダーについて考察。
3. 6行目を追加して再実行
- コードの変更は不要 — ワークシートの7行目に新しい注文を直接入力し、同じ
Subを再実行。
解答
Sub CompareLastRowMethods()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Dim lastRowMethod1 As Long
lastRowMethod1 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Debug.Print "End(xlUp): " & lastRowMethod1
Dim lastRowMethod2 As Long
lastRowMethod2 = ws.Range("A1").CurrentRegion.Rows.Count
Debug.Print "CurrentRegion: " & lastRowMethod2
End Sub
すべて明確でしたか?
フィードバックありがとうございます!
セクション 3. 章 2
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 3. 章 2