VBAの左辺と右辺の計算式を考える

プログラムでは「=」をよく使います。

これは、実は二つのケースで使われるという区別があります。「代入」と「比較」です。それがよくわからないままプログラムの勉強をされている方もいます。

実はこの感覚はコンピュータの知識に慣れていないと、非常に分かりにくいと考えています。解説している情報はたくさん見るのですが、あくまで慣れている人にわかりやすい情報が多く、初心者向けの言葉で解説されているような情報が少なかったので、今までの伝え方とはちょっと違う伝え方、そしてできるだけ簡単な言葉で説明します。図解はしていませんので、文章を繰り返し読んで理解していただきたいと思います。

あるプログラム言語では代入は「=」、比較は「==」というような区別がありますが、VBAではVBAはどちらも「=」です。

そこで、「代入」と 「比較」の違いを捉えながら、それぞれが何をするものなのか振り返ってみましょう。

代入

プログラム言語には何かを何かに代入するという処理をします。それができるのがプログラムでありプログラムのメリットでもあります。

何かを入れるものを「変数」と読んでいます。そこに何かを入れます。入れるものの種類は実に様々です。

また、WordやExcelであれば「変数」の代わりに現在選択しているところ、範囲を入れるものにする場合もあります。その範囲の値、色、大きさなどを指定する場合もあります。

この変数を状況に合わせて様々な値に入れ替えていくことでプログラムが動いていきます。

a=1

これは「aに1にする」という意味です。

これが実行されればセルaに1が入ります。

Range("A1").Value=1

これは「セルA1を1にする」という意味です。

a = Range("A1").Value + 1

これは「変数aにセルA1の値に1を足したものにする」という意味です。

「なにかをなにかにする」ことを指示するのが代入です。

代入は「=」を挟んで左と右に分けて考えます。左側を左辺、右側を右辺と呼びます。

左辺と右辺の二つしか存在しません。つまり「=」は代入にはひとつしか入らないということになります。

代入のことをもっと日本語にすると「左辺を右辺にする」という意味になります。

さて、その代入の中でややこしいのが次のようなVBAです。

a = a + 1

よくプログラムには出てくる書き方です。

これを算数の計算式のように「変数aは変数aに1を足したものと等しい」と読んではいけません。プログラムはあくまで左辺と右辺があるのであれば代入処理になります。

日本語にすれば「変数aを変数aに1を足したものにする」となります。

これで意味の通じる翻訳になったかと思います。

しかし、それでも、「変数a」を「変数a」自体に1を足したものにする。というのはなんだか変な感じがします。Excelで言えば循環参照のような感じもします。これは次のように考えましょう。

左辺はあくまで入れる先です。入れるものは右辺にあるものです。

この場合の「=」は「代入演算子」と呼ばれます。

右辺は「変数aに1を足す」ということになりますが、この時点の右辺は、計算前の「変数a」の値を使いそれに1を足したものを左辺の新たな「変数a」の値として書き換えるということになります。

a = a + 1
a = a + 1
a = a + 1
a = a + 1
a = a + 1

と5回同じ処理があったとしましょう。

始めの時点で「変数a」は何も設定されていないので0が入っています。

1行目ではその初めの0に1を足して「変数a」は1になります。

2行目ではその前の変数aの結果に1を足して「変数a」は2になります。

このように「変数a」が決まった数ずつ足された値に書き換わっていく、というのが左辺と右辺に同じ変数名が入っているプログラムの動作です。

繰り返し処理のFor文などに入っていて、その処理をした回数を管理するのに数多く使われているテクニックです。

比較

比較というのは、二つの値を比較することです。

この場合、最終的に欲しいのは比較した結果、そうだったのか(真・True)とそうではなかったか(偽・False)の二つに一つどちらになっているかの情報だけです。

よく使われるのはIf文の中で条件を判定するのに使われます。

If a=1 Then
処理
End If

もしも変数aが1ならば処理するというVBAです。

この比較の場合も左のものと右のものを左辺右辺で区別します。代入と明らかに違うのは左辺に右辺の物を入れるということではなく、左辺と右辺を比較しているということ、実際にはIf~Thenのような条件分岐文で囲まれていることが挙げられます。

この場合、算数と同じように「右辺は左辺」と読んでしまうとまた、左辺の内容が右辺になってしまうような日本語になってしまうので、「右辺は左辺?」と読んでみるとわかりやすいかもしれません。その結果が成立していれば処理に入るし、成立しなければ処理には入らないしという動作になります。

今回は「=」の使い方がどっちなのかを考えていますが、比較の場合、「=」だけではなく、そうではない、より大きい、未満、以下を表すための「>」「<」「>=」「<=」「<>」のような物が入る場合もあります。この左辺と右辺をつなぐものを「比較演算子」と呼びます。

まとめ

「=」には二つの使い方「代入演算子」「比較演算子」があるということが大事です。どちらの場合で使われているのか、どちらの場合で使いたいのかそれをきちんと把握しておきましょう。

それから「左辺」と「右辺」という考え方も大事ですので今一度確認しておいてください。

「代入演算子」として使う場合はほとんど「=」しかありません。「左辺を右辺にする」使い方です。

「比較演算子」として使う場合は、主に「If~Then」などの条件分岐文とセットで使われています。これは変数に入っている値を変えるなどの状態が変わるものではなく二つのものを比較してそれがあっているかあっていないかだけを調べるという意味で使われます。

「代入演算子」の場合、同じ行に代入の動作するものだけが書かれているわけではありません。 10回のループを表すFor文であれば、次のようになります。

For a=1 To 10
処理
Next

この場合のa=1は一瞬比較に見えますが変数aの初期値に1を設定し、ループの度に変数 A を10まで上昇させるという意味ですので、これは代入として使われていることになります。For文に関しては代入かどうか意識しなくても文法を覚えておけばこのような説明ができなくても良いですが、ちょっと考えた時に、代入として使われているという感覚に慣れればよいと思います。

コメント

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