【RangeとCellsでセルの位置を指定する】
1 新しいマクロをつくる
2 マクロをコピーして書きかえる
3 Rangeのセル番地を直接指定
4 Rangeのセル番地を定数で指定
5 Rangeのセル番地を変数で指定
6 Cellsの行番号と列番号を直接指定
7 Cellsの行番号と列番号を定数で指定
Rangeのセル番地を定数で指定
パイさん
「Excel VBA/マクロのRangeのセル番地については三つの指定方法がありますが、
今回は、その二、Rangeオブジェクトの引数となるセル番地を定数で指定する方法を紹介します。
ここで、既に、『新しいマクロをつくる』で紹介した、
セル位置をセル番地で指定するRangeオブジェクトを再び紹介します。」
ソンくん
「定数ってなんですか。」
パイさん
「定数とは、固定の値を保持するためのデータの入れ物です。」
パイさん
「定数をつかうときは、まず名前を決めます。この定数の名前には次のような決まりがあります。」
パイさん
「このような決まりに従えば、定数名はどのようにつけてもかまわないのですが、
意味のある文字にしておくと、あとで見たときにわかりやすいコードになります。
ここでは、セル番地を設定するための定数をつくってみます。
Excel VBAでは、定数名を日本語文字にすることもできるため、
セル番地を示す定数であるということが、一目でわかるように、定数名を『番地』とします。
定数名を決めたら、それが定数であることを宣言しないとパソコンには通じません。
そこで、『Const』という定数宣言文字を、自分で決めた定数名の前にもってくることになります。
それから、その定数の後に『=』をもってきて、更にその定数に設定する値を書きこみます。
ここでは、セル番地を指定したいので、値を『A1』としておきましょう。
マクロ『セル番地_定数指定』をつくって、定数名を『番地』、セル番地を示す値を『A1』として
定数を宣言してみましょう。」
ソンくん
「まずは、前回のマクロ『セル番地_直接指定』をコピーして、一番下の行にはりつけます。」
ソンくん
「次にマクロ名を『セル番地_定数指定』にします。」
パイさん
「その通りです。
次は、『Sub 定数A1()』の右側にカーソルをもってきてEnterキーを1回押してみましょう。」
ソンくん
「改行されて空白行が1行できました。」
パイさん
「空白行の2行目にカーソルをもってきて、スペースを一つ入れてから、定数名を『番地』、値を『A1』として
定数を宣言してみましょう。」
ソンくん
「『Const』という定数宣言文字を打って、スペースを入れて、定数名『番地』を打って、スペースを入れて、
『=』を打って、スペースを入れて、値『A1』を打ちます。」
パイさん
「ほぼOKです。値『A1』は文字列ということになるので、『”』を『A1』の前後に入れておいてください。」
Const 番地 = ”A1”
ソンくん
「入力しました。」
パイさん
「これで、セル番地として値が『A1』の定数『番地』が宣言されました。
次に、この定数をつかうコードを書きます。
『Range()』の引数には、今、セル番地として『"B2"』が入っていますが、
ここをセル番地としての定数『番地』に書きかえてください。」
Range(番地).Value = "直接指定B2"
ソンくん
「書きかえました。」
パイさん
「ここで、右辺の文字列を『定数指定A1』に書きかえておきましょう。」
Range(番地).Value = "定数指定A1"
ソンくん
「書きかえました。」
パイさん
「それでは、いったん全てのセルの値をクリアしてから、マクロ『セル番地_定数指定』を実行してみましょう。」
ソンくん
「セルA1に、『定数指定A1』が、書きこまれました。」
パイさん
「マクロ『セル番地_定数指定』を書きかえます。
セル番地を示す定数『番地』の値を『B2』として、宣言してみましょう。
また、『Range(番地).Value』に設定する値を『定数指定B2』としましょう。」
ソンくん
「書きかえました。」
パイさん
「OKです。それでは、マクロ『セル番地_定数指定』を実行してみましょう。」
ソンくん
「セルB2に、『定数指定B2』が、書きこまれました。」
パイさん
「このように、セル番地を示す値を定数に設定しておけば、
『Range(セル番地).Value』のセル番地を定数により指定することができます。
試しに、定数『番地』に設定するセル番地を示す文字列を適当な値に書きかえて、マクロを実行して、
指定したセル番地に文字が書きこまれることを確かめてみましょう。
(1) セルA2に『定数指定A2』を、
(2) セルB1に『定数指定B1』を、
(3) セルC3に『定数指定C3』を、代入してみましょう。
-
演習(1):マクロ『セル番地_定数指定』
定数『番地』に、『A2』を設定
セル『番地』の値に、『定数指定A2』を代入
-
Sub セル番地_定数指定()
Const 番地 = "A2"
Range(番地).Value = "定数指定A2"
End Sub
-
演習(2):マクロ『セル番地_定数指定』
定数『番地』に、『B1』を設定
セル『番地』の値に、『定数指定B1』を代入
-
Sub セル番地_定数指定()
Const 番地 = "B1"
Range(番地).Value = "定数指定B1"
End Sub
-
演習(3):マクロ『セル番地_定数指定』
定数『番地』に、『C3』を設定
セル『番地』の値に、『定数指定C3』を代入
-
Sub セル番地_定数指定()
Const 番地 = "C3"
Range(番地).Value = "定数指定C3"
End Sub
Rangeのセル番地については三つの指定方法がありますが、
今回は、その二、Rangeオブジェクトの引数となるセル番地を定数で指定する方法を紹介しました。
これは、セル番地を直接指定することなく、定数を経由してセル番地を間接的に指定するということです。
このセル番地を間接的に指定するということに関しては、実はもう一つ別の方法があります。
では、定数をつかわずに、セル番地を間接的に指定するにはどうしたらよいのでしょうか。
これについては、次回『Rangeのセル番地を変数で指定』で紹介します。」