【RangeとCellsでセルの位置を指定する】

 3 Rangeのセル番地を直接指定

 4 Rangeのセル番地を定数で指定

 5 Rangeのセル番地を変数で指定

 6 Cellsの行番号と列番号を直接指定

 7 Cellsの行番号と列番号を定数で指定

 8 Cellsの行番号と列番号を変数で指定

 9 Rangeのセル範囲を指定

Rangeのセル範囲を指定

パイさん

Excel VBA/マクロのRangeセル範囲については三つの指定方法があります。

 その一、Rangeオブジェクトの引数となるセル範囲直接指定する方法

 その二、Rangeオブジェクトの引数となるセル範囲定数で指定する方法

 その三、Rangeオブジェクトの引数となるセル範囲変数で指定する方法

 

 ここで、セル位置セル範囲で指定するRangeオブジェクトを紹介します。

Img2_9_1

 Rangeオブジェクトの引数には、最小セル番地から最大セル番地までのセル範囲

 “A1:Z9”のように、文字列型で指定します。」



1. Rangeのセル範囲を直接指定

パイさん

Excel VBA/マクロのRangeセル範囲については三つの指定方法がありますが、

 今回は、その一、Rangeオブジェクトの引数となるセル範囲直接指定してみます。

 

 まずは、セル範囲A1:C1のセルの値に『OK』という文字列を代入してみます。

 新しいマクロをつくって、マクロ名を『セル範囲_直接指定』、

 Rangeオブジェクトの引数となるセル範囲“A1:C1”とし、

 そのセルの値に『OK』を代入してみましょう。」

Sub セル範囲_直接指定()

 Range(“A1:C1”).Value = "OK"

End Sub

ソンくん

「コードを書きました。」

パイさん

「それでは、マクロ『セル範囲_直接指定』を実行してみましょう。」

Img2_9_2

ソンくん

セルA1:C1に、『OK』が、書きこまれました。」


パイさん

「次に、セル範囲A2:D2のセルに『OK』という文字列を代入してみましょう。」

Sub セル範囲_直接指定()

 Range(“A2:D2”).Value = "OK"

End Sub

ソンくん

「コードを書きました。」

パイさん

「それでは、マクロ『セル範囲_直接指定』を実行してみましょう。」

Img2_9_3

ソンくん

セル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オブジェクトの引数となるセル範囲定数で指定してみます。

 

 定数とは、固定の値を保持するためのデータの入れ物です。」

Img2_4_1

パイさん

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

Img2_4_2

パイさん

「このような決まりに従えば、定数名はどのようにつけてもかまわないのですが、

 意味のある文字にしておくと、後で見たときにわかりやすいコードになります。

 

 ここでは、セル範囲を設定するための定数をつくってみます。

 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


パイさん

「それでは、いったん全てのセルの値をクリアしてから、マクロ『セル範囲_定数指定』を実行してみましょう。」

Img2_9_2

ソンくん

セルA1:C1に、『OK』が、書きこまれました。」


パイさん

「マクロ『セル範囲_定数指定』を書きかえます。

 セル範囲を示す定数セル範囲』の値を『A2:D2』として、宣言してみましょう。

 また、『Range(セル範囲).Value』に設定する値を『OK』としましょう。」


Sub セル範囲_定数指定()

 Const セル範囲 = ”A2:D2

 Range(セル範囲).Value = "OK"

End Sub

ソンくん

「書きかえました。」

パイさん

「OKです。それでは、マクロ『セル範囲_定数指定』を実行してみましょう。」

Img2_9_3

ソンくん

セル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オブジェクトの引数となるセル範囲変数で指定してみます。

 

 変数とは、一時的に値を保持するためのデータの入れ物です。」

Img2_5_1

パイさん

変数をつかうときは、まず名前を決めます。この変数の名前には次のような決まりがあります。

 この決まりは、定数の名前を決めるときの決まりとまったく同じです。」

Img2_5_2

パイさん

「『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


パイさん

「それでは、いったん全てのセルの値をクリアしてから、マクロ『セル範囲_変数指定』を実行してみます。」


Img2_9_2

ソンくん

セルA1:C1に、『OK』が、書きこまれました。」


パイさん

「マクロ『セル範囲_変数指定』を書きかえます。

 セル範囲を設定する変数名を『セル範囲』、

 変数セル範囲』に設定するセル範囲を示す文字列を『A2:D2』、

 更に、『Range(セル範囲).Value』に設定する値を『OK』としましょう。」


Sub セル範囲_変数指定()

 Dim セル範囲 As String

 セル範囲 = "A2:D2"

 Range(セル範囲).Value = "OK"

End Sub

ソンくん

「書きかえました。」

パイさん

「OKです。

 それでは、マクロ『セル範囲_変数指定』を実行してみましょう。」

Img2_9_3

ソンくん

セル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セル範囲の指定方法が三つ揃いましたので、おさらいします。

 

 その一、セル範囲直接指定

 コードにセル範囲直接記述する方法。

 マジックナンバーと呼ばれるやり方でプログラムのメンテナンス上、非推奨。

 

 その二、セル範囲定数で指定

 セル範囲に名前をつけて定数宣言すると同時に、その定数セル範囲を示す文字列を設定する方法。

 マクロが終了するまでセル範囲が変わることがない固定値のときに有効。

 

 その三、セル範囲変数で指定

 セル範囲に名前をつけて文字列型として変数宣言した後に、その変数セル範囲を示す文字列を

 設定する方法。

 マクロが終了するまでにセル範囲が何回も変わる変動値のときに有効。

 定数に値を設定するのは宣言時の一回限りですが、変数は宣言後に何回でも値を設定することが可能です。