こんにちは。すたユキです。
ここでは、エクセルVBAを扱う上で最重要ともいえるRangeオブジェクトの基本的な使い方について触れていきます。
RangeオブジェクトにはRangeプロパティやCellsプロパティなどがあるのですが、C言語やPythonなど他のプログラミング言語の知識がない方は少し難しく感じるかもしれません。
この辺りは出来るだけわかりやすくお伝えしていきたいと思います。
Rangeオブジェクトの使用例
下記のセルB2にTestという文字を入力してみます。
このセルB2自体がRangeオブジェクトで、これを参照して操作するということになります。
※Rangeオブジェクトは単一セルのみではなく、複数セル(行や列含む)でも表現できます。
※ここではTestという標準モジュール内にMyTestプロシージャを作成しています。
1 2 3 4 5 6 7 8 9 10 11 |
Option Explicit Sub MyTest() Dim rng As Range 'rngにSheet1のB2セルオブジェクトを格納 Set rng = Sheet1.Range("B2") 'B2セルのValueプロパティに文字列"Test"を与える rng.Value = "Test" End Sub |
下記が実行結果です。セルB2にTestという文字列が入力されました。
ここで、これまで少しVBAを使ったことがあるという方は、ん?こんなの1行で書けないか?と思われるかもしれません。
それはその通りなのですが、ここではオブジェクトを扱うという点に主眼を置いているので、敢えて変数宣言して、Setステートメントでオブジェクトの割り当てを行っています。
上記のメリットについては、ここでは割愛しますが、気になる方はオブジェクト指向について調べてみてください。
ちなみに、1行で書く場合は下記のような書き方になります。
1 |
Sheet1.Range("B2").Value = "Test" |
Cellsプロパティでの表し方
Rangeプロパティの代わりにCellsプロパティを使うと下記のように表せます。
1 |
Sheet1.Cells(2, 2).Value = "Test" 'Cells(行番号, 列番号) |
このようにCellsを使う場合は、1つ目の引数に行番号(B2の2)を2つ目の引数に列番号(B2のB)を入れます。
なお、行番号と列番号は上記のように整数(Long型)で与えるのが一般的ですが、文字列(String型)でも動きます。
(実用上不便なのでおすすめはしません)
1 |
Sheet1.Cells(2, "B").Value = "Test" |
複数セル範囲を参照する方法
B2からD5セルを範囲選択する場合は下記のように書きます。
(わかりやすいように選択しています)
1 |
Sheet1.Range("B2:D5").Select |
または、下記のように2つのセルを指定するような書き方もできます。
(応用しやすいのでおすすめ)
1 |
Sheet1.Range(Cells(2, 2), Cells(5, 4)).Select |
結果は下記のとおりです。
離れた範囲を参照する場合は下記のように書きます。
1 |
Sheet1.Range("B2:D5,C7:E7").Select |
または、下記のようにUnionメソッドを使用します。
(複数範囲は同一シートである必要があります)
1 |
Union(Sheet1.Range("B2:D5"), Sheet1.Range("C7:E7")).Select |
よく使うRangeオブジェクトのメンバー
・メソッド
Activate | 1 つのセルをアクティブにします。セルは現在の選択範囲内にある必要があります。 |
Clear | オブジェクト全体をクリアします。 |
Copy | 範囲を、指定の範囲またはクリップボードにコピーします。 |
Cut | オブジェクトを切り取り、クリップボードまたは指定された範囲に貼り付けます。 |
Delete | オブジェクトを削除します。 |
Insert | ワークシートまたはマクロ シートの指定された範囲に、空白のセルまたはセル範囲を挿入します。指定された範囲にあったセルはシフトされます。 |
Merge | 指定した Range オブジェクトからマージされたセルを作成します。 |
Select | オブジェクトを選択します。 |
・プロパティ
Address | コード記述時の言語で参照範囲を表す文字列型 (String) の値を返します。 |
Areas | 複数領域の選択範囲のすべての範囲を表す Areas コレクションを返します。 読み取り専用です。 |
Borders | スタイルまたはセル範囲 (条件付き書式の一部として定義された範囲を含む) の罫線を表す Borders コレクションを返します。 |
Cells | 指定した範囲のセルを表すRangeオブジェクトを返します。 |
Characters | オブジェクト テキスト内の文字範囲を表す Characters オブジェクトを返します。 Characters オブジェクトを使用して、テキスト文字列内の文字を書式設定します。 |
Column | 指定した範囲内の最初の領域の最初の列の数を返します。 取得のみ可能な Long 値です。 |
Columns | 指定された範囲の列を表す Range オブジェクトを返します。 |
End | 集計元範囲を含む領域の終わりにあるセルを表す Range オブジェクトを返します。 End + 上方向キー、End + 下方向キー、End + 左方向キー、End + 右方向キーのいずれかを押す操作と同等です。 読み取り専用の Range オブジェクト。 |
Font | 指定したオブジェクトのフォントを表す Font オブジェクトを返します。 |
Formula | A1 スタイル表記でオブジェクトの暗黙的に交差する数式を表す Variant 値を取得または設定します。 |
Interior | 指定されたオブジェクトの内部を表す Interior オブジェクトを返します。 |
MergeArea | 指定したセルを含むマージされた範囲を表す Range オブジェクトを返します。 指定したセルがマージされた範囲内にない場合、このプロパティは指定したセルを返します。 読み取り専用のバリアント型 (Variant) の値。 |
Offset | 指定された範囲からオフセットした範囲を表すRangeオブジェクトを返します。 |
Range | セルまたはセル範囲を表す Range オブジェクトを返します。 |
Row | 範囲内の最初の領域の最初の行の番号を返します。 取得のみ可能な Long 値です。 |
Rows | 指定した範囲の行を表す Range オブジェクトを返します。 |
Value | 指定されたセル範囲の値を表すバリアント型 (Variant) の値を設定します。値の取得および設定が可能です。 |
以上です。
最後まで読んでいただきありがとうございました。