【RangeとCellsでセルの位置を指定する】
1 新しいマクロをつくる
2 マクロをコピーして書きかえる
3 Rangeのセル番地を直接指定
4 Rangeのセル番地を定数で指定
5 Rangeのセル番地を変数で指定
6 Cellsの行番号と列番号を直接指定
7 Cellsの行番号と列番号を定数で指定
8 Cellsの行番号と列番号を変数で指定
「Excel VBA/マクロのRangeのセル番地については三つの指定方法がありますが、
今回は、その三、Rangeオブジェクトの引数となるセル番地を変数で指定する方法を紹介します。
ここで、既に、『新しいマクロをつくる』で紹介した、
セル位置をセル番地で指定するRangeオブジェクトを再び紹介します。」
「変数ってなんですか。」
「変数とは、一時的に値を保持するためのデータの入れ物です。」
「変数をつかうときは、まず名前を決めます。この変数の名前には次のような決まりがあります。
この決まりは、定数の名前を決めるときの決まりとまったく同じです。」
「『Range』で、セル番地を変数で指定するときは、セル番地の変数名を決めます。
名前の決まりに従えば、変数名はどのようにつけてもかまわないのですが、
意味のある文字にしておくと、後で見たときにわかりやすいコードになります。
Excel VBAでは、変数名を日本語文字にすることもできるため、
ここでは、セル番地の変数名を『番地』とします。
変数名を決めたら、それが変数であることを宣言しないとパソコンには通じません。
そこで、『Dim』という変数宣言文字を自分で決めた変数名の前にもってくることになります。
定数は定数宣言と同時にその値を設定しますが、変数は変数宣言のときにその値を設定するのではなく、
あとで、その値を設定します。
そのため、変数は、変数宣言のときに、その変数のデータ型だけ定義する(決めておく)必要があります。」
「データ型ってなんですか。」
「データ型とは、その変数のつかい方を明確にするものです。
データ型には数値型、文字列型、日付型などがありますが、
『Range』のセル番地については必ず文字列で指定することになるため、データ型は文字列型を定義します。
「文字列型ってなんですか。」
「文字列型とは、単なる文字タイプということです。
文字列型は『String』という型指定文字をつかいます。
文字列型を定義するときは、『As String』のように、
文字列型『String』の前に『As』というデータ型定義文字を付けますが、
この『As』は『○○として定義する』という意味です。
つまり、『As String』は『文字列型として定義する』という意味です。
また、文字列型の変数に値を設定するときは、値の前後に『”』『”』を付けることが必要です。
『Dim』という変数宣言文字に、自分で決めた変数名を続けて、
更に『As』というデータ型定義文字を付けて、最後にデータ型を続けて宣言します。
ここでは、セル番地を指定したいので、変数の値を『A1』としておきます。
それでは、マクロ『変数A1』をつくって、データ型を文字列型『String』として変数名『番地』を
宣言してみましょう。
また、『Range(番地).Value』に設定する値を『変数指定A1』としましょう。」
「まずは、前回のマクロ『セル番地_定数指定』をコピーして、一番下の行にはりつけます。」
「次にマクロ名を『セル番地_変数指定』にします。」
「その通りです。次は、マクロ『セル番地_変数指定』の2行目Const 番地 = ”B2” を削除します。
Const の左側にカーソルをもってきてShiftキーを押しながらEndキーを押してみましょう。」
「Const 番地 = ”B2” が選択されました。」
「その状態で、Deleteキーを押してみましょう。」
「Const 番地 = ”B2” が削除されて空白行が1行できました。」
その状態で、変数名を『番地』、データ型を『String』として変数を宣言してみましょう。」
「『Dim』という変数宣言文字を打って、スペースを入れて、変数名『番地』を打って、スペースを入れて、
『As』を打って、スペースを入れて、データ型『String』を打ちます。」
Dim 番地 As String
「入力しました。」
「その通りです。次は、どうしたらいいと思いますか。」
「『Range』の引数は変数『番地』のままで、セルに設定する値を『変数指定A1』に書きかえます。」
Range(番地).Value = "変数指定A1"
「書きかえました。」
「それでは、いったん全てのセルの値をクリアしてから、マクロ『変数A1』を実行してみます。」
「あっ!実行時エラーと書かれた画面が現れました!」
「こんなときはあわてずに、デバッグボタンを押しましょう。」
「『ビジュアル ベーシック エディター』の画面が現れて、『コードウィンドウ』の中のさっき記述した
『Range(番地).Value = “変数指定A1”』のところに⇒(右矢印)が付いて背景色が黄色になっています。」
「そこにエラーがあるということを教えてくれています。
背景色が黄色になっているコードのRangeの引数となっている変数『番地』にカーソルをあわせてみてください。」
「小さな画面が表示されました。この小さな画面の中に『番地 = “”』と書かれています。」
「これは、変数『番地』の値が空白です。つまり、変数『番地』がからっぽですということです。」
「そういえば、変数『番地』になんにも入れてません。」
「よく気づきましたね。
定数であれば定数宣言するときから値を設定しておきますが、
変数の場合は変数宣言するときにはデータ型を定義するだけでまだ値を設定していません。」
「変数宣言した後に、変数に値を設定しなければならないということですね。」
「その通りです。
変数は、宣言後に値を設定しなければなりませんが、何回でも値を設定し直すことが可能です。
エラーの原因がわかったところで、エラー表示を消しましょう。」
「『ビジュアル ベーシック エディター』のツールバーの中にある■(リセット)ボタンをクリックしてください。」
「エラー表示が消えました。」
「それでは、変数『番地』にセル番地を示す文字列を設定しましょう。ここではセル番地を『A1』としておきます。」
「変数『番地』にセル番地を示す文字列『A1』を設定するのだから、『番地 = "A1"』でいいのかな。」
番地 = "A1"
「『番地 = "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 セル番地_変数指定()
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の行番号と列番号を直接指定』で紹介します。」
◇もしもPython-xlwingsだったら、
2023-03-19
2021-12-20
2021-12-12