Excelの自動化では「データ範囲を正確に自動で取得したい」という場面がよくあります。
VBAには、そのための便利な機能が複数あり、代表的なのが CurrentRegion と UsedRange です。
この記事では、それぞれの特徴・違い・具体的な使い方・注意点をまとめて解説します。
目次
1. データ範囲の自動検出とは?
VBAでデータ範囲の自動検出を使うと、以下のような処理が簡単になります。
✅ データの端を見つける
✅ 表全体を自動で選択する
✅ 表の下や右にデータを追加する
表のサイズや位置が毎回変わる場合でも対応できるのが大きなメリットです。
2. CurrentRegionとは?
CurrentRegionは、指定したセルを基準に、空白行・空白列で囲まれた範囲全体を自動で取得するプロパティです。
例:A1セルを基準にCurrentRegionを取得
Sub CurrentRegionの例()
Range("A1").CurrentRegion.Select
End Sub
⚫️特徴
✅ 表形式のデータ範囲を簡単にまとめて取得できる
✅ 周囲に空白行・空白列がある場合、その中だけが対象
✅ 表の途中に空白セルがあっても範囲は途切れない
3. UsedRangeとは?
UsedRangeは、シート内で実際に使用されているセル範囲全体を取得するプロパティです。
例:UsedRangeを選択する
Sub UsedRangeの例()
ActiveSheet.UsedRange.Select
End Sub
⚫️特徴
✅ シート内の最も外側の使用セルまでを範囲とする
✅ 空白セルや見た目上の空白部分も範囲に含まれる場合がある
✅ 一度入力して削除したセルも、場合によっては範囲に含まれる
4. CurrentRegionとUsedRangeの違い【一覧表】
項目 | CurrentRegion | UsedRange |
---|---|---|
範囲の基準 | 指定したセルを起点に表全体 | シート全体 |
空白セルの影響 | 周囲の空白行・空白列で範囲が区切られる | 空白セルがあっても範囲に含まれる場合あり |
データの削除後の影響 | 影響なし | 削除後も範囲に残る場合がある(要注意) |
よく使う場面 | 表単位で処理したい場合 | シート全体の使用範囲を把握したい場合 |
5. 使い分けの目安
✅ CurrentRegionが向いている場面
- 表形式データを対象にする処理(表の範囲選択、データ集計 など)
- データの周囲に空白行や空白列がある場合
✅ UsedRangeが向いている場面
- シート全体の使用範囲を把握したい場合(最終行・最終列の確認 など)
- シートのレイアウト全体を考慮する処理
6. 実用例
⚫️CurrentRegionで表全体を選択して、最後の行にデータ追加
Sub 表の下にデータを追加()
Dim rng As Range
Dim lastRow As Long
Set rng = Range("A1").CurrentRegion
lastRow = rng.Rows(rng.Rows.Count).Row
Cells(lastRow + 1, 1).Value = "新しいデータ"
End Sub
⚫️UsedRangeで最終列の右に列を追加
Sub 最終列の右に列を追加()
Dim lastCol As Long
lastCol = ActiveSheet.UsedRange.Columns.Count
Columns(lastCol + 1).Insert
End Sub
7. 注意点
- UsedRangeは見た目に反して広い範囲を取得することがある
→ 気になる場合は、ActiveSheet.UsedRange
をリセットする方法も検討しましょう。 - CurrentRegionは途中に完全な空白行・列があると範囲が途切れる
→ データの並び方に注意が必要です。
8. まとめ
処理内容 | おすすめ機能 |
---|---|
表全体を対象にしたい | CurrentRegion |
シートの使用範囲をざっくり把握したい | UsedRange |
最終行や最終列だけ取得したい | Endプロパティ |
VBAのデータ範囲自動検出を使いこなせば、表のサイズや位置が変わっても安定した処理ができます。
CurrentRegionとUsedRangeの違いを理解して、状況に応じて使い分けることがポイントです。
コメント