【RangeとCellsでセルの位置を指定する】
3 Rangeのセル番地を直接指定
4 Rangeのセル番地を定数で指定
5 Rangeのセル番地を変数で指定
6 Cellsの行番号と列番号を直接指定
7 Cellsの行番号と列番号を定数で指定
8 Cellsの行番号と列番号を変数で指定
9 Rangeのセル範囲を指定
Rangeのセル範囲を指定
パイさん
「Excel VBA/マクロのRangeのセル範囲については三つの指定方法があります。
その一、Rangeオブジェクトの引数となるセル範囲を直接指定する方法
その二、Rangeオブジェクトの引数となるセル範囲を定数で指定する方法
その三、Rangeオブジェクトの引数となるセル範囲を変数で指定する方法
ここで、セル位置をセル範囲で指定するRangeオブジェクトを紹介します。

Rangeオブジェクトの引数には、最小セル番地から最大セル番地までのセル範囲を、
“A1:Z9”のように、文字列型で指定します。」
1. Rangeのセル範囲を直接指定
パイさん
「Excel VBA/マクロのRangeのセル範囲については三つの指定方法がありますが、
今回は、その一、Rangeオブジェクトの引数となるセル範囲を直接指定してみます。
まずは、セル範囲A1:C1のセルの値に『OK』という文字列を代入してみます。
新しいマクロをつくって、マクロ名を『セル範囲_直接指定』、
Rangeオブジェクトの引数となるセル範囲を“A1:C1”とし、
そのセルの値に『OK』を代入してみましょう。」
Sub セル範囲_直接指定()
Range(“A1:C1”).Value = "OK"
End Sub
ソンくん
「コードを書きました。」
パイさん
「それでは、マクロ『セル範囲_直接指定』を実行してみましょう。」

ソンくん
「セルA1:C1に、『OK』が、書きこまれました。」
パイさん
「次に、セル範囲A2:D2のセルに『OK』という文字列を代入してみましょう。」
Sub セル範囲_直接指定()
Range(“A2:D2”).Value = "OK"
End Sub
ソンくん
「コードを書きました。」
パイさん
「それでは、マクロ『セル範囲_直接指定』を実行してみましょう。」

ソンくん
「セルA2:D2に、『OK』が、書きこまれました。」
パイさん
「このように、Rangeの右側の引数『( )』の中には、セルの位置を示す値、
つまりセル範囲を文字列で指定することになります。
試しに、セル範囲を適当な値に書きかえて、マクロを実行して、
指定したセルの位置に文字が書きこまれることを確かめてみましょう。
(1) セルB3:E3に『OK』を、
(2) セルC1:C5に『OK』を、
(3) セルA1:E5に『OK』を、代入してみましょう。
-
演習(1):マクロ『セル範囲_直接指定』
セルB3:E3の値に、『OK』という文字列を代入
-
Sub セル範囲_直接指定()
Range(“B3:E3”).Value = "OK"
End Sub
-
演習(2):マクロ『セル範囲_直接指定』
セルC1:C5の値に、『OK』という文字列を代入
-
Sub セル範囲_直接指定()
Range(“C1:C5”).Value = "OK"
End Sub
-
演習(3):マクロ『セル範囲_直接指定』
セルA1:E5の値に、『OK』という文字列を代入
-
Sub セル範囲_直接指定()
Range(“A1:E5”).Value = "OK"
End Sub
2. Rangeのセル範囲を定数で指定
パイさん
「Excel VBA/マクロのRangeのセル範囲については三つの指定方法がありますが、
今回は、その二、Rangeオブジェクトの引数となるセル範囲を定数で指定してみます。
定数とは、固定の値を保持するためのデータの入れ物です。」

パイさん
「定数をつかうときは、まず名前を決めます。この定数の名前には次のような決まりがあります。」

パイさん
「このような決まりに従えば、定数名はどのようにつけてもかまわないのですが、
意味のある文字にしておくと、後で見たときにわかりやすいコードになります。
ここでは、セル範囲を設定するための定数をつくってみます。
Excel VBAでは、定数名を日本語文字にすることもできるため、
セル範囲を示す定数であるということが、一目でわかるように、定数名を『セル範囲』とします。
定数名を決めたら、それが定数であることを宣言しないとパソコンには通じません。
そこで、『Const』という定数宣言文字を、自分で決めた定数名の前にもってくることになります。
それから、その定数の後に『=』をもってきて、更にその定数に設定する値を書きこみます。
ここでは、セル範囲を指定したいので、値を『A1:C1』としておきましょう。
マクロ『セル範囲_定数指定』をつくって、定数名を『セル範囲』、セル範囲を示す値を『A1:C1』として
定数を宣言してみましょう。」
ソンくん
「『Const』という定数宣言文字を打って、スペースを入れて、定数名『セル範囲』を打って、スペースを入れて、
『=』を打って、スペースを入れて、値『A1:C1』を打ちます。」
パイさん
「ほぼOKです。値『A1:C1』は文字列ということになるので、『”』を『A1:C1』の前後に入れておいてください。」
Const セル範囲 = ”A1:C1”
ソンくん
「入力しました。」
パイさん
「これで、セル範囲として値が『A1:C1』の定数『セル範囲』が宣言されました。
次に、この定数『セル範囲』を引数としたセルの値に『OK』を代入してみましょう。」
Range(セル範囲).Value = "OK"
ソンくん
「入力しました。」
Sub セル範囲_定数指定()
Const セル範囲 = ”A1:C1”
Range(セル範囲).Value = "OK"
End Sub
パイさん
「それでは、いったん全てのセルの値をクリアしてから、マクロ『セル範囲_定数指定』を実行してみましょう。」

ソンくん
「セルA1:C1に、『OK』が、書きこまれました。」
パイさん
「マクロ『セル範囲_定数指定』を書きかえます。
セル範囲を示す定数『セル範囲』の値を『A2:D2』として、宣言してみましょう。
また、『Range(セル範囲).Value』に設定する値を『OK』としましょう。」
Sub セル範囲_定数指定()
Const セル範囲 = ”A2:D2”
Range(セル範囲).Value = "OK"
End Sub
ソンくん
「書きかえました。」
パイさん
「OKです。それでは、マクロ『セル範囲_定数指定』を実行してみましょう。」

ソンくん
「セルA2:D2に、『OK』が、書きこまれました。」
パイさん
「このように、セル範囲を示す値を定数に設定しておけば、
『Range(セル範囲).Value』のセル範囲を定数により指定することができます。
試しに、定数『セル範囲』に設定するセル範囲を示す文字列を適当な値に書きかえて、マクロを実行して、
指定したセル範囲に文字が書きこまれることを確かめてみましょう。
(1) セルB3:E3に『OK』を、
(2) セルC1:C5に『OK』を、
(3) セルA1:E5に『OK』を、代入してみましょう。
-
演習(1):マクロ『セル範囲_定数指定』
定数『セル範囲』に、『B3:E3』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_定数指定()
Const セル範囲 = "B3:E3"
Range(セル範囲).Value = "OK"
End Sub
-
演習(2):マクロ『セル範囲_定数指定』
定数『セル範囲』に、『C1:C5』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_定数指定()
Const セル範囲 = "C1:C5"
Range(セル範囲).Value = "OK"
End Sub
-
演習(3):マクロ『セル範囲_定数指定』
定数『セル範囲』に、『A1:E5』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_定数指定()
Const セル範囲 = "A1:E5"
Range(セル範囲).Value = "OK"
End Sub
3. Rangeのセル範囲を変数で指定
パイさん
「Excel VBA/マクロのRangeのセル範囲については三つの指定方法がありますが、
今回は、その三、Rangeオブジェクトの引数となるセル範囲を変数で指定してみます。
変数とは、一時的に値を保持するためのデータの入れ物です。」

パイさん
「変数をつかうときは、まず名前を決めます。この変数の名前には次のような決まりがあります。
この決まりは、定数の名前を決めるときの決まりとまったく同じです。」

パイさん
「『Range』で、セル範囲を変数で指定するときは、セル範囲の変数名を決めます。
名前の決まりに従えば、変数名はどのようにつけてもかまわないのですが、
意味のある文字にしておくと、後で見たときにわかりやすいコードになります。
Excel VBAでは、変数名を日本語文字にすることもできるため、
ここでは、セル範囲の変数名を『セル範囲』とします。
変数名を決めたら、それが変数であることを宣言しないとパソコンには通じません。
そこで、『Dim』という変数宣言文字を自分で決めた変数名の前にもってくることになります。
定数は定数宣言と同時にその値を設定しますが、
変数は変数宣言のときにその値を設定するのではなく、
あとで、その値を設定します。
そのため、変数は、変数宣言のときに、
その変数のデータ型だけ定義する(決めておく)必要があります。」
ソンくん
「データ型ってなんですか。」
パイさん
「データ型とは、その変数のつかい方を明確にするものです。
データ型には数値型、文字列型、日付型などがありますが、
『Range』のセル範囲については必ず文字列で指定することになるため、
データ型は文字列型を定義します。
ソンくん
「文字列型ってなんですか。」
パイさん
「文字列型とは、単なる文字タイプということです。
文字列型は『String』という型指定文字をつかいます。
文字列型を定義するときは、『As String』のように、
文字列型『String』の前に『As』というデータ型定義文字を付けますが、
この『As』は『○○として定義する』という意味です。
つまり、『As String』は『文字列型として定義する』という意味です。
また、文字列型の変数に値を設定するときは、値の前後に『”』『”』を付けることが必要です。
『Dim』という変数宣言文字に、自分で決めた変数名を続けて、
更に『As』というデータ型定義文字を付けて、最後にデータ型を続けて宣言します。
ここでは、セル範囲を指定したいので、変数の値を『A1:C1』としておきます。
それでは、マクロ『セル範囲_変数指定』をつくって、
データ型を文字列型『String』として変数名『セル範囲』を宣言してみましょう。
また、『Range(セル範囲).Value』に設定する値を『OK』としましょう。」
「まずは、変数名を『セル範囲』、データ型を『String』として変数を宣言してみましょう。」
ソンくん
「『Dim』という変数宣言文字を打って、スペースを入れて、変数名『セル範囲』を打って、スペースを入れて、
『As』を打って、スペースを入れて、データ型『String』を打ちます。」
Dim セル範囲 As String
パイさん
「その通りです。次は、どうしたらいいと思いますか。」
ソンくん
「変数『セル範囲』に文字列『A1:C1』を設定します。」
セル範囲 = "A1:C1"
パイさん
「その通りです。次は、どうしたらいいと思いますか。」
ソンくん
「変数『セル範囲』を引数としたセルの値に『OK』を代入します。」
Range(セル範囲).Value = "OK"
ソンくん
「入力しました。」
Sub セル範囲_変数指定()
Dim セル範囲 As String
セル範囲 = "A1:C1"
Range(セル範囲).Value = "OK"
End Sub
パイさん
「それでは、いったん全てのセルの値をクリアしてから、マクロ『セル範囲_変数指定』を実行してみます。」

ソンくん
「セルA1:C1に、『OK』が、書きこまれました。」
パイさん
「マクロ『セル範囲_変数指定』を書きかえます。
セル範囲を設定する変数名を『セル範囲』、
変数『セル範囲』に設定するセル範囲を示す文字列を『A2:D2』、
更に、『Range(セル範囲).Value』に設定する値を『OK』としましょう。」
Sub セル範囲_変数指定()
Dim セル範囲 As String
セル範囲 = "A2:D2"
Range(セル範囲).Value = "OK"
End Sub
ソンくん
「書きかえました。」
パイさん
「OKです。
それでは、マクロ『セル範囲_変数指定』を実行してみましょう。」

ソンくん
「セルA2:D2に、『OK』が、書きこまれました。」
パイさん
「このように、変数を宣言し、セル範囲を示す文字列を変数に設定すれば、
『Range(セル範囲).Value』のセル範囲を変数により指定することができます。
試しに、変数『セル範囲』に設定するセル範囲を示す文字列を適当な値に書きかえて、
マクロを実行して、指定したセル範囲に文字が書きこまれることを確かめてみましょう。
(1) セルB3:E3に『OK』を、
(2) セルC1:C5に『OK』を、
(3) セルA1:E5に『OK』を、代入してみましょう。
-
演習(1):マクロ『セル範囲_変数指定』
セル範囲を文字列型の変数『セル範囲』として定義
変数『セル範囲』に、値『B3:E3』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_変数指定()
Dim セル範囲 As String
セル範囲 = "B3:E3"
Range(セル範囲).Value = "OK"
End Sub
-
演習(2):マクロ『セル範囲_変数指定』
セル範囲を文字列型の変数『セル範囲』として定義
変数『セル範囲』に、値『C1:C5』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_変数指定()
Dim セル範囲 As String
セル範囲 = "C1:C5"
Range(セル範囲).Value = "OK"
End Sub
-
演習(3):マクロ『セル範囲_変数指定』
セル範囲を文字列型の変数『セル範囲』として定義
変数『セル範囲』に、値『A1:E5』を設定
セル『セル範囲』の値に、『OK』を代入
-
Sub セル範囲_変数指定()
Dim セル範囲 As String
セル範囲 = "A1:E5"
Range(セル範囲).Value = "OK"
End Sub
これで、Rangeのセル範囲の指定方法が三つ揃いましたので、おさらいします。
その一、セル範囲を直接指定
コードにセル範囲を直接記述する方法。
マジックナンバーと呼ばれるやり方でプログラムのメンテナンス上、非推奨。
その二、セル範囲を定数で指定
セル範囲に名前をつけて定数宣言すると同時に、その定数にセル範囲を示す文字列を設定する方法。
マクロが終了するまでセル範囲が変わることがない固定値のときに有効。
その三、セル範囲を変数で指定
セル範囲に名前をつけて文字列型として変数宣言した後に、その変数にセル範囲を示す文字列を
設定する方法。
マクロが終了するまでにセル範囲が何回も変わる変動値のときに有効。
定数に値を設定するのは宣言時の一回限りですが、変数は宣言後に何回でも値を設定することが可能です。