Excel VBAでプログラミング入門【基本編】

前回の記事ではプログラミング入門はExcel VBAがおすすめということと、プログラミングの3つのルールを知るだけで理解がしやすくなるという話をしました。

今回はその3つのルールについて説明します。先に申し上げると、

  1. =
  2. For
  3. If

この3つの意味と使い方を覚えれば、Excel VBAだけでなく他のプログラミング言語の理解も早くなるはずです。

スポンサーリンク

VBEの起動

まずコードを書く準備をしていきます。

VBAの記録は開発タブにある「Visual Basic」から行います。

ただ、開発タブはデフォルトで非表示になっていますので、Alt + T → OキーでExcelのオプションを開き、リボンのユーザー設定で開発タブにチェックを入れておきます。

この画面がVBEというエディターです。挿入から標準モジュールを選択するとコードを記録する画面が出てきます。ここからプログラミングが始まります。

では、プログラミング習得に必要な3つのルールを学びながら、実際にプログラミングを体験してみましょう。

=(左辺に右辺を代入する)

まずは「=」という記号の意味です。数学では「左辺は右辺である」という意味ですが、プログラミングでは「左辺に右辺を代入する」という意味になります。代入は「入れる」と簡単に解釈してもOKです。

実際にコードを書いて確認してみましょう。

Sub 代入() はプロシージャ(一連の処理をまとめたもの)の開始、End Subでプロシージャの終了を表します。「代入」プロシージャを実行すると、その間に記された処理が上から順番に実行されます。

代入プロシージャの中身は、【A1】に”Hello”という文字列を代入するというコードです。Range(“A1”)がセルA1を表しています。

「=」は「左辺に右辺を代入する」なので、「【A1】に”Hello”を代入する」という意味になります。

実行ボタンを押してみると、実際に【A1】に”Hello”と表示されました。

順次構造(上から下へ順番に処理)

一度【A1】の中身を消して、【A1】に”Hello World!”と表示させてみましょう。先ほどの”Hello”を”Hello World!”に書き直すというのも1つの方法ですが、少し違った方法を試してみます。

まず【A1】に”Hello”を代入します。

その次に、【A1】に「Range(“A1″) & ” World!”」を代入します。&は値や文字列同士を連結させる記号で、【A1】に入っている”Hello”と” World!が連結して、”Hello World!”が【A1】に表示されます。

ただ、プログラムは目にも留まらぬ速さで処理されるので、その過程はさっぱりわかりません。そこでデバッグ機能を使って順番に見ていきましょう。コードの各行の左側をクリックすると茶色い●印が付きます。ブレークポイントと呼びます。

2行目と3行目に付けてから実行ボタンを押すと、その茶色い●印のところで一旦ストップし、再度実行ボタンを押したら処理を再開します。これで1行ずつ処理を確認することができます。

もし、2行目と3行目が逆の場合はどうなるでしょうか。

この場合、先に【A1】と” World!”が連結した文字列が【A1】に代入されます。【A1】に何も入力されていなければ、” World!”だけが表示されます。

次の行で【A1】に”Hello”が代入されますので、最終的に【A1】には”Hello”のみが表示されます。

このように上から下に向かって順番に処理されていくので、上で行った処理は下に書かれた処理によって上書きされてしまいます。このようなルールを順次構造と呼び、あらゆるプログラミング言語の原則となっています。

変数(データの容れ物)

プログラミングでは「変数」というデータの容れ物を使って計算結果を記憶したり、あるいは変数を計算に使用して処理を進めていくと効率的です。

例えばこのように、【A1~A10】まですべてのセルに”Hello”と表示する処理があります。

この”Hello”を”こんにちは”に変えないといけなくなったら、2行目から11行目まで書き直す必要があります。

置換機能を使えば容易いことではありますが、規模が大きくなると置換機能を使うことで意図しない箇所も置換してしまい動かなくなってしまうということもあり得ます。

そこで役立つのが変数です。

2行目で「aisatu」という変数に”Hello”を代入します。【A1~A10】には変数「aisatu」を代入します。変数「aisatu」には”Hello”が入っているため、【A1~A10】には”Hello”が表示されます。

では2行目の”Hello”を”こんにちは”に変えたら、今度は【A1~A10】には”こんにちは”が表示されます。

また、変数は中身を変えることができるため変数と呼びます。

2行目で変数aisatuに”Hello”を代入して【A1~A5】までに表示させます。

9行目で変数aisatuに” World!”を連結させて、【A6~A10】には”Hello World!”と表示させることができました。

ちなみに、変数の名前は基本的に自由です。ただし、ExcelやVBAで既に機能として使われている用語については「予約語」といって使えません。予約語かどうかをいちいち調べるのは面倒なので、使われてなさそうな言葉を組み合わせて内容がわかる変数名にするとよいでしょう。

個人的には今回の「aisatu」のような日本語をローマ字にしたものはほとんど予約語になっていませんし、中身もわかりやすいのでおすすめです。

For(ループ)

プログラミングが業務効率に役立つのは、多くの処理をさばけるからです。そのためには処理を繰り返す循環構造、すなわちループを使う必要があります。

処理を繰り返したい時はFor文を使います。

先ほど【A1~A10】に”Hello”と表示した処理を、For文を使ってやってみましょう。

Forの後ろにある「i = 1」は、変数iに1を代入するという意味です。ここの変数名は何でもいいのですが、整数(integer)を表す「i」を使うことが慣例として多いです。

「For i = 1 To 10」と書くことで、「変数iに1を代入し、変数iが10になるまで処理を繰り返す」という意味になります。すなわち変数iはカウンタとしての役割を果たし、「Next」までいくとiに1を加算して処理の頭に戻ります。

For文のコツは、このカウンタとなる変数iを処理の中で使えるということ。Range(“A” & i)というのは”A”と変数iを連結するということで、変数iが1の時は【A1】、変数iが2の時は【A2】を表します。

つまり、【A1~A10】に”Hello”と表示する処理ということになります。先ほど同じことを1行ずつ10行文の処理を記述しましたが、For文を使えばたった3行で済みました。これが【A1~A100】までの処理だったといても書く行数は増えません。10を100に変えるだけです。

インデント(字下げ)でコードを見やすくする

上のコードでForとNextの間の処理の行頭が少し右にずれていることに気が付いた方もいらっしゃるでしょう。

これはインデント(字下げ)といって、Tabキーを押して挿入しています。

インデント自体は動作に影響は及びませんが、コードを見やすくするために使っています。

今回はFor文の中身は1行だけでしたが、これが数十行に渡っていくとどこからどこまでがFor文の中身なのかがわかりにくくなります。また、For文の中にFor文が出てきたりとネスト(入れ子)の状態になってくると、どこまでが入れ子のFor文なのかもわからなくなってきて混乱を招きます。

インデントを行うことで、どこまでが一連のFor文なのかというのをわかりやすくしているのです。このテクニックは後述するIf文などでも使いますので覚えておきましょう。

If(条件分岐)

ExcelでIf関数を使ったことがある人ならすぐ察しがつくかと思います。If文は条件によって処理を分岐させます。分岐構造といいます。

先ほどのFor文と組み合わせてみましょう。奇数行では”Hello”、偶数行では”こんにちは”と表示させるよう分岐させます。

If文は「If 条件式 Then 処理 End If」と記述し、True(条件を満たしている場合)であれば処理を行います。

もしFalse(条件に合っていない場合)であれば処理を行いませんが、「Else」の後ろにFalseの場合の処理を指定することができます。

偶数は2で割り切れる数字ですので、「変数iを2で割った時の余りが0である」という条件を作ります。Modは割り算の余りを出すことができます。Trueの場合は変数aisatuに”こんにちは”、Falseの場合は変数iに”Hello”を代入します。

If文の条件式における「=」の意味

ここでややこしい話なのですが、「If i Mod 2 = 0」の中に出てくる「=」は「左辺は右辺である」の意味で使われます。これはIf文の条件式の時だけ注意してください。

また、他のプログラミング言語だと「==」と書かないといけなかったりと、VBAで癖づいてしまうと厄介な文法だったりします。

プログラミングはこれらを組み合わせるだけ

他にも覚えることはありますが、プログラミングはこれらのことを組み合わせるだけで作ることができます。

あと最重要なのが「何を作りたいか」です。目標となる成果物がイメージできれば、あとは説明してきた動作を組み合わせてゴールを目指すだけです。

ただ、無機質な例題しか説明してこなかったので、まだどんなものが作れるのかイメージがつかないかと思います。

次回は実践編として、実際に僕が作った成果物を例にプログラミングを勉強してみましょう。

コメント

タイトルとURLをコピーしました