Excel VBAのUsedRangeプロパティ徹底解説!基本構文から4つの実践的な使い方まで
この記事では、Excel VBAにおけるUsedRangeプロパティの使い方を詳しく解説します。連続した範囲への適用、離れたセルが点在する範囲への適用、非アクティブなワークシートやワークブックでの使用など、4つのパターン別に具体的なコード例とともに紹介していきます。
記事を読みながら実際に手を動かして練習したい方は、サンプルファイルをダウンロードしてご利用ください。
VBAのUsedRangeプロパティとは?基本を解説
UsedRangeプロパティは、Rangeオブジェクトを返すVBAのプロパティです。ワークシート内で一度でも使用されたすべてのセルを含む範囲を取得でき、先頭に空行がある場合もその空行を含めた範囲が返されるのが特徴です。
VBAコード内でUsedRangeプロパティを使用する際は、必ずワークシート名と組み合わせて記述します。アクティブなワークシートに対してUsedRangeプロパティを使う場合の基本的な構文は以下の通りです。
Dim Rng As Range
Set Rng = ActiveSheet.UsedRange

⧭ ポイント解説
- ここでいうRngは、UsedRangeプロパティが返すRangeオブジェクトを受け取る変数名です。任意の名前を付けることができます。
- アクティブシート以外のワークシートでUsedRangeプロパティを使用したい場合は、「ActiveSheet」の代わりに対象のワークシート名を指定します。
たとえば「Sheet1」という名前のワークシートに適用する場合は、次のように記述します。
Set Rng = Worksheets("Sheet1").UsedRange
UsedRangeプロパティの4つの使い方
ここからは、VBAでUsedRangeプロパティを活用するための代表的な4つの方法を順番に見ていきましょう。
1. 連続したデータ範囲でUsedRangeプロパティを使う
まずは、データが連続して入力されているワークシートでUsedRangeプロパティを使用するケースです。
この場合、UsedRangeプロパティは先頭の空行も含めて、使用された範囲全体を返します。
ここでは、社員の氏名・入社日・給与がまとめて入力された「Sheet1」を例に考えてみましょう。

このワークシートに対してUsedRangeプロパティを実行すると、先頭の空行を含むB2:C13の範囲が返されます。
Sheet1がアクティブな状態であれば、次のコードが使えます。
Dim Rng As Range
Set Rng = ActiveSheet.UsedRange

あるいは、シート名を明示的に指定する以下の書き方でも同じ結果になります。
Dim Rng As Range
Set Rng = Worksheets("Sheet1").UsedRange

⧭ 実行結果
今回のコードでは、RangeオブジェクトのSelectメソッドを使用しています。そのためコードを実行すると、Sheet1の範囲B2:D13が選択された状態になります。

関連記事: VBAのRangeオブジェクトの使い方(5つの主要プロパティ)
2. データが点在する範囲でUsedRangeプロパティを使う
ワークシート内のデータが離れた場所に点在している場合でも、UsedRangeプロパティは間にある空白セルを含んだ範囲全体を返します。
たとえばSheet1に、合計給与・最高給与・最低給与がB3からG3にかけて離れて配置されているケースを見てみましょう。

このような場合も、前述のどちらかのコードを使ってUsedRangeプロパティを実行できます。
Dim Rng As Range
Set Rng = ActiveSheet.UsedRange

または、シート名を指定する書き方です。
Dim Rng As Range
Set Rng = Worksheets("Sheet1").UsedRange

⧭ 実行結果
このコードでは、Sheet1のB2:G3の範囲内にある空白セルも含めてすべてのセルが返されます(先頭の空行も含まれます)。Selectメソッドを使用しているため、実行すると範囲B2:G3が選択されます。

関連記事: VBAで範囲の最終セルを取得する方法(具体例つき)
3. 非アクティブなワークシートでUsedRangeプロパティを使う
現在アクティブになっていないワークシートに対してUsedRangeプロパティを使用したい場合は、コードの冒頭で対象のワークシート名を明示的に指定する必要があります。
たとえば、アクティブなワークシートがSheet1である状況で、Sheet2に対してUsedRangeプロパティを使いたい場合は、次のように記述します。
Dim Rng As Range
Set Rng = Worksheets("Sheet2").UsedRange

これにより、Sheet2内で使用されているすべてのセルが選択されます。

関連記事: VBAで範囲を設定する方法(7つの事例)
4. 非アクティブなワークブックでUsedRangeプロパティを使う
UsedRangeプロパティは、開いている別のワークブックに対しても使用できます。その場合は、コードの先頭にワークブック名を指定しましょう。
たとえば、アクティブなワークブックがWorkbook1である状況で、Workbook2のSheet1に対してUsedRangeプロパティを使いたい場合は、以下のように記述します。
Dim Rng As Range
Set Rng = Workbooks("Workbook2.xlsm").Worksheets("Sheet1").UsedRange

このコードを実行すると、Workbook2のSheet1で使用されている範囲が選択されます。

関連記事: VBAで範囲内の各セルを処理する方法(3つの手法)
覚えておきたい注意点
VBAのUsedRangeプロパティは、常にRangeオブジェクトを返します。この記事では視覚的に分かりやすくするためにRangeオブジェクトのSelectメソッドを使用しましたが、実際には用途に応じてValue、Copy、Clearなど、Rangeオブジェクトが持つ他のプロパティやメソッドを自由に組み合わせて使うことができます。
また、UsedRangeプロパティは削除済みのセルや書式だけが残るセルも「使用済み」と判断することがあるため、正確な最終行・最終列を取得したい場合はEndプロパティとの併用も検討するとよいでしょう。
まとめ
今回は、Excel VBAのUsedRangeプロパティについて、連続した範囲・点在する範囲・非アクティブなシート・非アクティブなブックという4つのパターン別に解説しました。UsedRangeプロパティをマスターすれば、データ範囲の自動判定や一括処理など、Excel作業の自動化の幅が大きく広がります。
ご不明な点がありましたら、お気軽にお問い合わせください。
関連記事
- セルの値に基づいて範囲を選択するVBAの方法(7選)
- 列番号を指定してVBAで範囲を操作する方法(4選)
- VBA Range Offsetの使い方(11の活用例)
- 変数で行番号を指定するVBA Rangeの使い方(4つの例)
- Excelで文字数をカウントする7つの簡単テクニック
-
ExcelのINDIRECT関数で範囲を参照する8つの簡単な方法
INDIRECT関数(検索/行列関数)は、文字列で指定された参照を返す関数です。この関数を使うと、任意のセルや範囲の参照から値を取得できます。本記事では、ExcelのINDIRECT関数を使った範囲指定の活用方法を、具体的な手順とともに詳しく解説します。 説明をわかりやすくするために、4四半期分の売上情報を表すサンプルデータを使用します。データセットは5つの列で構成されており、営業担当者、第1四半期、第2四半期、第3四半期、第4四半期となっています。 練習用ファイルのダウンロード ExcelのINDIRECT関数で範囲を扱う8つの方法 1. セル参照を使って値を取得する INDIRECT関数
-
VBAでExcelテーブルを使いこなす9つの方法【作成・編集・削除まで徹底解説】
テーブル(Table)は、ExcelでVBAを扱う際に最も重要かつ頻繁に使用されるオブジェクトのひとつです。この記事では、VBAを使ってExcelのテーブルを操作するさまざまな方法を、具体的なコード例とともに詳しく解説します。 VBAでExcelテーブルを操作する9つの方法 テーブルとは、先頭行に見出し(ヘッダー)が含まれる特殊なデータセットのことです。 VBAにおいて、テーブルはListObjectというオブジェクトとして扱われます。以下では、ExcelテーブルをVBAで活用できる9つの方法を順番に紹介していきます。 1. VBAでテーブルを作成する まずは、VBAを使ってExcelにテー