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

 2 マクロをコピーして書きかえる

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

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

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

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

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

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

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

パイさん

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

 今回は、その三、Rangeオブジェクトの引数となるセル番地

 文字列型の変数で指定する方法を紹介します。

 

 ここで、既に、『新しいマクロをつくる』で紹介した、

 セル位置セル番地で指定するRangeオブジェクトを再び紹介します。」

Img2_3_1

ソンくん

変数ってなんですか。」

パイさん

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

Img2_5_1

パイさん

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

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

Img2_5_2

パイさん

「『Range』で、セル番地変数で指定するときは、セル番地の変数名を決めます。

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

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

 Excel VBAでは、変数名を日本語文字にすることもできるため、

 ここでは、セル番地の変数名を『番地』とします。

 

 変数名を決めたら、それが変数であることを宣言しないとパソコンには通じません。

 そこで、『Dim』という変数宣言文字を自分で決めた変数名の前にもってくることになります。

 

 定数は定数宣言と同時にその値を設定しますが、

 変数は変数宣言のときにその値を設定するのではなく、

 あとで、その値を設定します。

 そのため、変数は、変数宣言のときに、

 その変数データ型だけ定義する(決めておく)必要があります。」

ソンくん

データ型ってなんですか。」

パイさん

データ型とは、その変数のつかい方を明確にするものです。

 データ型には数値型、文字列型、日付型などがありますが、

 Range』のセル番地については必ず文字列で指定することになるため、

 データ型文字列型を定義します。

ソンくん

文字列型ってなんですか。」

パイさん

文字列型とは、単なる文字タイプということです。

 

 文字列型は『String』という型指定文字をつかいます。

 文字列型を定義するときは、『As String』のように、

 文字列型String』の前に『As』というデータ型定義文字を付けますが、

 この『As』は『○○として定義する』という意味です。

 つまり、『As String』は『文字列型として定義する』という意味です。

 また、文字列型変数に値を設定するときは、値の前後に『』『』を付けることが必要です。

 

 Dim』という変数宣言文字に、自分で決めた変数名を続けて、

 更に『As』というデータ型定義文字を付けて、最後にデータ型を続けて宣言します。

 

 ここでは、セル番地を指定したいので、変数の値を『A1』としておきます。

 それでは、マクロ『セル番地_変数指定』をつくって、

 データ型を文字列型『String』として変数名『番地』を宣言してみましょう。

 また、『Range(番地).Value』に設定する値を『変数指定A1』としましょう。」

ソンくん

「まずは、前回のマクロ『セル番地_定数指定』をコピーして、一番下の行にはりつけます。」

Img2_5_3

ソンくん

「次にマクロ名を『セル番地_変数指定』にします。」

Img2_5_4

パイさん

「その通りです。次は、マクロ『セル番地_変数指定』の2行目Const 番地 = ”B2” を削除します。

 Const の左側にカーソルをもってきてShiftキーを押しながらEndキーを押してみましょう。」

Img2_5_5

ソンくん

Const 番地 = ”B2” が選択されました。」

パイさん

「その状態で、Deleteキーを押してみましょう。」

Img2_5_6

ソンくん

Const 番地 = ”B2” が削除されて空白行が1行できました。」

パイさん

 その状態で、変数名を『番地』、データ型を『String』として変数を宣言してみましょう。」

ソンくん

「『Dim』という変数宣言文字を打って、スペースを入れて、変数名『番地』を打って、スペースを入れて、

 『As』を打って、スペースを入れて、データ型『String』を打ちます。」

 Dim 番地 As String

ソンくん

「入力しました。」

Img2_5_7

パイさん

「その通りです。次は、どうしたらいいと思いますか。」

ソンくん

「『Range』の引数は変数番地』のままで、セルに設定する値を『変数指定A1』に書きかえます。」

 Range(番地).Value = "変数指定A1"

ソンくん

「書きかえました。」

Img2_5_8

ソンくん

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


Img2_5_9

ソンくん

「あっ!実行時エラーと書かれた画面が現れました!」

パイさん

「こんなときはあわてずに、デバッグボタンを押しましょう。」

Img2_5_10

ソンくん

「『ビジュアル ベーシック エディター』の画面が現れて、『コードウィンドウ』の中のさっき記述した

 『Range(番地).Value = “変数指定A1”』のところに(右矢印)が付いて背景色が黄色になっています。」

パイさん

「そこにエラーがあるということを教えてくれています。

 背景色が黄色になっているコードのRangeの引数となっている変数番地』にカーソルをあわせてみてください。」

Img2_5_11

ソンくん

「小さな画面が表示されました。この小さな画面の中に『番地 = “”』と書かれています。」

パイさん

「これは、変数番地』の値が空白です。つまり、変数番地』がからっぽですということです。」

ソンくん

「そういえば、変数番地』になんにも入れてません。」

パイさん

「よく気づきましたね。

 定数であれば定数宣言するときから値を設定しておきますが、

 変数の場合は変数宣言するときにはデータ型を定義するだけでまだ値を設定していません。

ソンくん

変数宣言した後に、変数に値を設定しなければならないということですね。」

パイさん

「その通りです。

 変数は、宣言後に値を設定しなければなりませんが、何回でも値を設定し直すことが可能です。

 エラーの原因がわかったところで、エラー表示を消しましょう。」

Img2_5_12

パイさん

「『ビジュアル ベーシック エディター』のツールバーの中にある(リセット)ボタンをクリックしてください。」

Img2_5_13

ソンくん

「エラー表示が消えました。」

パイさん

「それでは、変数番地』にセル番地を示す文字列を設定しましょう。ここではセル番地を『A1』としておきます。」

ソンくん

変数番地』にセル番地を示す文字列『A1』を設定するのだから、『番地 = "A1"』でいいのかな。」

 番地 = "A1"

ソンくん

「『番地 = "A1"』を追加しました。」

Img2_5_14

パイさん

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

Img2_5_15

ソンくん

セルA1に、『変数指定A1』が、書きこまれました。」


パイさん

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

 セル番地を設定する変数名を『番地』、変数番地』に設定するセル番地を示す文字列を『B2』、

 更に、『Range(番地).Value』に設定する値を『変数指定B2』としましょう。」

Img2_5_16

ソンくん

「書きかえました。」

パイさん

「OKです。

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

Img2_5_17

ソンくん

セルB2に、『変数指定B2』が、書きこまれました。」

パイさん

「このように、変数を宣言し、セル番地を示す文字列を変数に設定すれば、

 『Range(セル番地).Value』のセル番地変数により指定することができます。

 

 試しに、変数番地』に設定するセル番地を示す文字列を適当な値に書きかえて、

 マクロを実行して、指定したセル番地に文字が書きこまれることを確かめてみましょう。

 (1) セルA2に『変数指定A2』を、

 (2) セルB1に『変数指定B1』を、

 (3) セルC3に『変数指定C3』を、代入してみましょう。

演習(1):マクロ『セル番地_変数指定』

セル番地を文字列型の変数『番地』として定義

変数『番地』に、値『A2』を設定

セル『番地』の値に、『変数指定A2』という文字列を代入

Sub セル番地_変数指定()

 Dim 番地 As String

 番地 = "A2"

 Range(番地).Value = "変数指定A2"

End Sub

 

演習(2):マクロ『セル番地_変数指定』

セル番地を文字列型の変数『番地』として定義

変数『番地』に、値『B1』を設定

セル『番地』の値に、『変数指定B1』という文字列を代入

Sub セル番地_変数指定()

 Dim 番地 As String

 番地 = "B1"

 Range(番地).Value = "変数指定B1"

End Sub

 

演習(3):マクロ『セル番地_変数指定』

セル番地を文字列型の変数『番地』として定義

変数『番地』に、値『C3』を設定

セル『番地』の値に、『変数指定C3』という文字列を代入

Sub セル番地_変数指定()

 Dim 番地 As String

 番地 = "C3"

 Range(番地).Value = "変数指定C3"

End Sub

 

 Rangeセル番地については三つの指定方法がありますが、

 今回は、その三、Rangeオブジェクトの引数となるセル番地変数で指定する方法を紹介しました。

 

 これで、Rangeセル番地の指定方法が三つ揃いましたので、おさらいします。

 

 その一、セル番地直接指定

 コードにセル番地直接記述する方法。

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

 前々回『Rangeのセル番地を直接指定』で紹介

 

 その二、セル番地定数で指定

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

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

 前回『Rangeのセル番地を定数で指定』で紹介

 

 その三、セル番地変数で指定

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

 設定する方法。

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

 定数に値を設定するのは宣言時の一回限りですが、

 変数は宣言後に何回でも値を設定することが可能です。

 

 今までは、Range(セル番地)オブジェクトをつかい、

 セル位置セル番地『英字の&数字ので指定してきました。

 セル位置を指定するということに関しては、実はもう一つ別の方法があります。

 それが、Cells(行番号, 列番号)オブジェクトをつかい、

 セル位置行番号『数字の列番号『数字ので指定するという方法です。

 

 これについては、次回『Cellsの行番号と列番号を直接指定』で紹介します。」