見出し画像

ExcelVBAでの変数の使い方

ITサポーターTsuchidaの土田です。以前プログラミングの入り口としてVBAが最適と紹介しましたが、プログラミングでの基本ルールの中で変数の使い方を紹介します。この記事はしばらく下書きで眠っていたので、ずいぶん前の記事の続きとなっています。

まず、プログラミングに慣れていない人が最初に突き当たるハードルは変数です。いきなり変数が登場して、この変数は何かとネット検索しても納得が得られるページが出てこなくて、変数の時点でプログラミングを断念する人もいます。プログラミングに慣れている立場からは、変数がないとプログラムの記述が長くなり、コーディングが大変になります。

変数とは引っ越しの際に使う段ボール箱みたいなもので、処理を行っている時に使用して、処理が終わったらいなくなってしまう一時的な入れ物です。変数はネーミングルールさえ守っていればプログラマが自由に使えるので、変数名もプログラマによってバラバラです。プログラマによってバラバラなところが慣れていない人にはわかりにくいのかもしれません。

ExcelのVBAには、一番大きな単位がプロジェクトでプロジェクトの中に複数のモジュールが存在しモジュールの中に複数存在するプロシージャの3階層にあります。私もVBAを作成するときは標準モジュールを1つ作成して、そのモジュールの中に複数のプロシージャを記述しています。VBAのプログラミングはプロシージャにコードを書くのです。プロシージャをひとまとめにしたものがモジュールというものです。VBAの中の3階層に簡単に触れましたが、一般的に変数とはプロシージャの中で一時的に使うものだと思ってください。プロシージャ間やプロジェクト全体に使う変数もありますが、慣れていない人はまずはプロシージャ内だけで使ってください。

変数を使う前に、VBAのエディタ(VBE)で、[ツール]-[オプション]-[編集]タブにある「変数の宣言を強制する」にチェックを入れます。これは変数をスペルミスをした場合にコンパイルエラーにしてくれます。スペルミスを気づかせてくれるので、この設定を行ってください。(慣れている人でも案外スペルミスはするもので、スペルミスは恥ずかしいことではありません。)

VBAでの変数はまず宣言を行ってから、変数を使うようにします。よく使う変数の宣言の例を記述してみます。

例.Dim i As Long

「Dim」は変数を宣言するときに使うステートメントで、「i」という名前でデータ型をLong(長整数型)との変数を宣言しています。VBAではよく「i」や「j」という名前の変数で宣言して、行数や列数をカウントするときに使います。

VBAのサンプルで以下のような記述が多いです。

Dim i As Long

For i = 2 To Cells(Rows.Count,1).End(xlUp).Row
      処理

Next

変数「i」を整数型で定義して、「i」2という数字をセットして処理を開始する。(2行から最終データ行まで処理を繰り返す)
Cells(Rows.Count,1)はA1048576セル(xls形式はA65536セル)を意味し、End(xlUp)はそのセルからCtrl+↑キーで移動したセルになり、そのセルがデータが入っている最終行セルとなり、最後のRowで最終行セルの行を数値で返す。

サンプルはFor Nextによって「i」には2行目から1行ずつ増えて最終データ行まで処理を繰り返すという意味になります。

プログラミングに慣れると、書かれている記述を一つずつ説明できるようになります。慣れている人間にとって当たり前でも、慣れていない人間にとって変数って突然現れる謎のワードに見えてしまいます。IfステートメントやForステートメントだったら、「VBA If」や「VBA For」でGoogleで検索すればいろいろ見つかります。でも変数は勝手につける名前なので、変数の意味がわからなくてGoogleで調べても知りたい回答が見つかりません。リファレンスマニュアルも、プロパティ・メソッド・ステートメントの使い方ばかりで、変数を知っているものとして変数の説明はありません。

変数って、日本語で言う「私」「あなた」「それ」「あれ」という代名詞に近いと思っています。前後に何もない文でいきなり代名詞が出てきても意味が分かりません。「私」は筆者かもしれませんが、小説なら登場人物の誰かは前後がないとわからないものです。日本人は国語で日本の文法を学んでいるので、代名詞には疑問を感じないはずなので、日本語に慣れない外国人が感じる疑問がわからなくなるものです。

変数って引っ越しの際に使う箱や日本語の代名詞のたとえのように、変数自体に意味を持つのではないのです。変数は手段であって、変数という手段を使うことによって、目的とするプログラムが出来上がるのです。変数って、プログラミングをコーディング中に必要になるので、処理によって増えます。最初からこの変数を使うぞと考えるのではなく、必要だから変数を使うので、その場合には変数の名前がダブらないように、変数をプロシージャの上の方で変数を定義して、すでに同じ名前の変数を使っていないか確認をします。

変数はプログラミング知識の必要条件ですが、十分条件ではありません。変数がわかったからといって、プログラミングが早くなるわけではありません。ただ変数が理解できるとプログラムを読む力が高まります。ほかの人が作って動作するプログラムを読むことがプログラミングの近道だったりします。

私がプログラミングの仕事を始めるときに、当時40代の大ベテランの人から、プログラムって書く人によって書き方が違うものだといわれました。仕様書がこういう物語を書いてくれという指示なら、プログラマーは小説家みたいなもので、同じ物語をわかりやすく面白く書けるかどうかはプログラマーの腕の見せ所だということです。

プログラミングの入り口に最適なVBAの最初のハードルの変数を説明してみました。慣れると当たり前のことをわかりやすく説明するって難しいものですね。

この記事が気に入ったらサポートをしてみませんか?