Excel VBA 範囲オブジェクト

⚡ スマートサマリー

Excel VBA の Range オブジェクトは、ワークシート上の単一のセルまたはセルのグループを表します。このページでは、オブジェクトの階層構造、Range プロパティと Cells プロパティ、セルの選択と参照、値の読み取りと書き込み、および Offset プロパティについて説明します。

  • 🎯 定義: 範囲オブジェクトは、単一のセル、行、列、選択範囲、または3D範囲を指します。
  • 🧬 階層: 完全な参照手順では、アプリケーション、ワークブック、ワークシート、範囲の順に読みます。
  • 🏷️ 特性と方法: プロパティはオブジェクトに関する情報を格納し、メソッドは選択やマージなどのアクションを実行します。
  • 🔢 セルの特性: Cells(Row, Column) はセルを番号で指定するため、プログラミングのループに適しています。
  • ✍️ 読み書き: Valueプロパティは、セルの内容を取得すると同時に、新しい内容を書き戻す機能も備えています。
  • ↔️ オフセットプロパティ: オフセットは、参照元となるセルから指定された行数と列数だけ移動させます。

Excel VBA 範囲オブジェクト

VBA 範囲とは何ですか?

VBA Range オブジェクトは、Excel ワークシート内の XNUMX つまたは複数のセルを表します。 Excel VBA の最も重要なオブジェクトです。 Excel VBA の範囲オブジェクトを使用すると、以下を参照できます。

  • 単一細胞
  • セルの行または列
  • 細胞の選択
  • 3D 範囲

前回のチュートリアルで説明したように、VBA は、 マクロしかし、VBAはシート上のどのデータを処理する必要があるかをどのように識別するのでしょうか?ここでVBAのレンジオブジェクトが役立ちます。

VBA でのオブジェクト参照の概要

Excel の VBA 範囲オブジェクトとオブジェクト修飾子を参照します。

  • オブジェクト修飾子: オブジェクトを参照するために使用されます。 参照しているワークブックまたはワークシートを指定します。

これらのセル値を操作するには、 特性 (NAIST) と メソッド 使用されています。

  • プロパティ: プロパティには、オブジェクトに関する情報が保存されます。
  • 方法: メソッドは、それが実行するオブジェクトのアクションです。 Range オブジェクトは、選択、コピー、クリア、並べ替えなどのアクションを実行できます。

VBAでは、Excel内のオブジェクトを参照する際にオブジェクト階層パターンに従います。以下の構造に従ってください。ここで「.dot」は、各レベルのオブジェクトを接続する役割を果たします。

アプリケーション.ワークブック.ワークシート.範囲

その階層構造には2つの異なるプロパティを通してアクセスできますが、最もよく使用されるのはRangeプロパティです。

Rangeプロパティを使用してExcel VBA Rangeオブジェクトを参照する方法

Range プロパティは XNUMX つの異なるタイプのオブジェクトに適用できます。

  • ワークシートオブジェクト
  • 範囲オブジェクト

Range プロパティの構文

  1. キーワードは「レンジ」。
  2. キーワードに続く括弧
  3. 関連するセル範囲
  4. 引用 (" ")
Application.Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("A1")

Range オブジェクトを参照する場合、上に示したように、次のように参照されます。 完全修飾リファレンスExcelに対して、どの範囲、どのシート、どのワークシートにデータを入力するかを正確に指定しました。

例:: メッセージBox Worksheets(“Sheet1”).Range(“A1”).Value

Range プロパティを使用すると、次のような多くのタスクを実行できます。

  • 範囲プロパティを使用した単一セルを参照してください。
  • Worksheet.Range プロパティを使用して単一セルを参照する
  • 行または列全体を参照する
  • Worksheet.Range プロパティなどを使用して結合されたセルを参照する

そのため、範囲プロパティのすべてのシナリオをカバーするには長すぎます。 上記のシナリオについては、XNUMX つのみの例を示します。 「範囲プロパティを使用する単一セル」を参照してください。

Worksheet.Range プロパティを使用して単一セルを参照する

特定のセルを参照するには、そのセルのアドレスをテキスト文字列として Range プロパティに渡します。

構文は単純です 「範囲(「セル」)」。

ここでは、「.Select」コマンドを使用してシートから単一のセルを選択します。

ステップ1) この手順では、Excelを開きます。

Worksheet.Range プロパティを使用した単一セル

ステップ2) このステップでは、

  • ソフトウェアの制限をクリック Worksheet.Range プロパティを使用した単一セル
  • 窓が開きます。
  • ここにプログラム名を入力し、「OK」ボタンをクリックします。
  • メインの Excel ファイルに移動します。トップメニューから「記録停止」ボタンをクリックしてマクロの記録を停止します。

Worksheet.Range プロパティを使用した単一セル

ステップ3) 次のステップでは、

  • マクロボタンをクリックします Worksheet.Range プロパティを使用した単一セル トップメニューから。 下のウィンドウが開きます。
  • このウィンドウで、「編集」ボタンをクリックします。

Worksheet.Range プロパティを使用した単一セル

ステップ4) 上記の手順を実行すると、「Single Cell Range」という名前のファイルのVBAコードエディタが開きます。Excelシートから範囲「A1」を選択するには、以下のコードを入力してください。

Sub SingleCellRange()
    Range("A1").Select
End Sub

Worksheet.Range プロパティを使用した単一セル

ステップ5) ファイルを保存します Worksheet.Range プロパティを使用した単一セル 以下に示すようにプログラムを実行します。

Worksheet.Range プロパティを使用した単一セル

ステップ6) プログラムを実行すると、セル「A1」が選択されていることがわかります。

Worksheet.Range プロパティを使用した単一セル

同様に、特定の名前のセルを選択することもできます。たとえば、「Guru99- VBAチュートリアル」。以下のコマンドを実行する必要があります。これにより、その名前のセルが選択されます。

範囲("Guru99- VBAチュートリアル”).選択

他の範囲オブジェクトを適用するためのコードサンプルを次に示します。

Excelでセルを選択する範囲 宣言された範囲
単一列の場合 範囲(「1:1」)
単一カラムの場合 範囲(“A:A”)
連続したセルの場合 範囲(「A1:C5」)
隣接していないセルの場合 範囲(「A1:C5、F1:F5」)
XNUMX つの範囲の交差の場合 範囲(「A1:C5 F1:F5」)
(交差セルの場合、コンマ演算子がないことに注意してください)
セルを結合するには 範囲(「A1:C5」)
(セルを結合するには「merge」コマンドを使用します)

セルを選択するのは最初のステップにすぎません。実際には、マクロはセル内の値を読み取り、新しい値を書き戻します。

Rangeオブジェクトを使用して値を読み書きする方法

ワークシートを操作するマクロのほとんどは、次の2つのいずれかを実行します。セルから値を読み取るか、セルに値を書き込むかのどちらかです。どちらの場合も、Valueプロパティを介して処理が行われ、セルを事前に選択する必要はありません。

Sub ReadAndWrite()
    Dim Price As Double
    Dim Qty As Long

    ' Read two values out of the sheet
    Price = Range("B1").Value
    Qty = Range("B2").Value

    ' Write the calculated result back
    Range("B3").Value = Price * Qty

    ' Fill a whole block in one statement
    Range("D1:D10").Value = "Guru99"

    ' Clear only the contents, keeping the formatting
    Range("F1:F10").ClearContents
End Sub

このパターンが信頼できる理由は4つあります。

  • 選択は必須ではありません。 書き込み Range(“B3”).Value = 10 セルを先に選択するよりも、この方法の方が速くて安全です。記録されたマクロには .Select が多数含まれていますが、これはコードが必要としているからではなく、レコーダーがマウス操作をミラーリングしているためです。
  • 値とテキストの比較: .Value は基となるデータを返し、.Text は画面に表示される書式設定された文字列を返します。この文字列は列幅に応じて切り詰められる場合があります。計算式では .Value を読み取ります。
  • ブロック全体を1行に並べる: 複数セル範囲への割り当ては、すべてのセルを一度に埋めるため、ping.
  • 正しいことをクリアする: ClearContentsは値のみを削除し、Clearは書式設定も削除し、Deleteはセルを削除して周囲のセルを移動します。

範囲指定では、セルを文字と数字で指定します。2つ目のプロパティでは、同じセルを2つの数字で指定します。

セルのプロパティ

範囲と同様に、 VBA 「セルプロパティ」を使用することもできます。唯一の違いは、スプレッドシート上のセルを参照するために使用する「アイテム」プロパティがあることです。セルプロパティは、プログラミングのループ処理で役立ちます。

たとえば、

Cells.item(Row, Column)。以下の2行はどちらもセルA1を参照しています。

  • Cells.item(1,1) または
  • Cells.item(1,”A”)

VBAにおける範囲とセルの違い

RangeとCellsは異なる経路で同じワークシートのセルにアクセスするため、適切な選択をすることでコードが短くなり、読みやすくなります。

相違点 レンジ 細胞
アドレス形式 テキスト文字列、Range(“A1”) 2つの数値、Cells(1, 1)
複数のセル はい、範囲(“A1:C5”) 一度に1つの細胞ずつ
ループ内 文字列連結が必要です 行番号はループカウンタにすることができます
読みやすさ Excelに表示される住所と一致します 27列目はAA列よりもイメージしにくい。
併用 Range(Cells(1, 1), Cells(5, 3)) は、数値から A1:C5 を作成します。

実用的なルールとしては、一目で読み取れる固定アドレスには Range を使用し、実行時に行番号や列番号を計算する場合は Cells を使用するのが良いでしょう。

範囲オフセット プロパティ

Range offset プロパティは、元の位置から離れた行/列を選択します。 宣言された範囲に基づいてセルが選択されます。 以下の例を参照してください。

たとえば、

Range("A1").Offset(RowOffset:=1, ColumnOffset:=1).Select

この操作の結果、セルB2が移動します。オフセットプロパティにより、セルA1は1列1行離れた位置に移動します。RowOffset/ColumnOffsetの値は必要に応じて変更できます。負の値(-1)を使用すると、セルを後方に移動できます。

上記のコードを含む Excel をダウンロード

上記のExcelファイルをダウンロードしてください。 Code

よくあるご質問

Cells(Rows.Count, 1).End(xlUp).Row を使用してください。これは列 A の一番下から始まり、データを含む最後のセルまでジャンプします。行が削除された後でも、UsedRange よりも信頼性が高いです。

読み書きのたびにVBAとExcelの間で処理が行われます。単一の代入文で範囲を配列に読み込み、メモリ上で配列を処理し、最後に1つのステートメントで書き戻します。ScreenUpdatingを無効にすることも効果的です。

通常は無効なアドレス、存在しないシート名、またはアクティブでないワークシート上の範囲を選択しようとしたことが原因です。参照にシート名を指定するか、先にシートをアクティブにしてください。

はい。記録したコードを貼り付けると、AIアシスタントが各SelectとSelectionのペアを、直接の完全修飾Range参照に置き換えます。コピーしたシートで両方のバージョンを実行し、保存する前に比較してください。ping 変化。

はい。データシートのA列からD列までのすべての入力済み行など、対象を指定すると、AIアシスタントが対応する範囲式を返します。実際のデータに適用する前に、少量のサンプルで検証してください。