Excel VBA 入門 その6-2-2: 変数についてさらに詳しく知りましょう

StockSnap / Pixabay


皆さまこんにちは!

このサイトの管理者のHide(ヒデ)と申します。

前回に引き続き、今回も変数についてとりあげます。今回は変数についてさらに詳しく見ていきたいと思います。

前回のブログをご覧になりたい方は下記からどうぞ。

前回のブログのはこちら

では、始めましょう。

スポンサーリンク
Simplicityのレクタングル広告(大)

1. 変数を宣言した直後に入っている変数の中身とは

前回のブログで、変数は宣言して使うということを学びました。例えば、数値を格納する変数xや文字を格納する変数Resultは下記のように宣言するのでしたね。(xやResultは自分で決めた変数の名前です。)

Dim x As Long
Dim Result As String

上記のように変数を宣言することで、その宣言した部分より下の行でその変数を利用できます。では、このxやResultには元々どのような値が入っているのでしょうか。Excel-VBAでは下記のようになっています。

・変数xの中身は0(ゼロ)
・変数Resultの中身は""(空文字)

まず、数値の変数であるxには0が入ります。また、文字の変数であるResultには文字が何も入っていません。このことを「”(ダブルクォーテーション)」の記号を2つ並べて表し、空文字やNull(ヌル)が入っていると言ったりします。この部分は分かりづらいかもしれませんので、後述します。

変数の宣言直後は、何も入っていないんだなと覚えておいて頂ければ大丈夫です。

次に、変数の中身を更新(変更)する方法について見ていきましょう。

2. 変数の内容を更新する(数値編)

例えばxという数値を格納する変数があって、この変数の中身を更新したいとします。数値を扱う変数を更新するとは、例えば下記のようなものが考えられます。

<変数xを更新するケース>
ケース1: 変数xに元々入っている値を別の値に変更する。
ケース2: 変数xに計算結果を代入する。
ケース3: 変数xに元々入っている値にある数を加算する。
ケース4: 変数xに元々入っている値からある数を減算する。
....

それぞれのケースで、変数xには事前に「3」という値が入っているという前提で考えてみましょう。

まずケース1についてですが、変数xに元々「3」という数値が入っていて、これを「5」に変更しようとする場合、プログラムでは下記のように記述します。

x=5

このように記述することで変数xの中身が「3」から「5」になります。前回のブログでもお伝えしましたが、「=」の記号は特定の場合を除いて(後々のブログで解説します)、等しいという意味ではなく「右辺の内容を左辺の変数に代入する」という意味になります。(代入した後は結果的には左辺と右辺は等しくなります。)

次に、ケース2についてですが、例えば下記のように書きます。

x=(5+3)*2

この式では、右辺が(5+3)*2という計算式になっています。Excel-VBAのプログラミングでは、まず、右辺の計算式が実行され、その後「=」の記号によって左辺の変数xに値を代入するという動きをします。そのため、この式では右側の計算結果「16」が最終的に変数xに代入され、xの中身は「3」から「16」になります。

では、ケース3についてです。ここがプログラミングの最初の関門かもしれません。でもわかってしえば簡単ですので一緒に見ていきましょう。例えば、変数xに元々「3」という数値が入っていたとして、この変数xに1を足す場合、どのように書くと思いますか?

例えば

x+1

のような形でしょうか。実は、プログラミングでは下記のように書きます。

x=x+1

なんだか変ですね。数学であれば、xを移項したら 0=1になってしまいます。でもプログラミングの世界ではこのように書くんですね。また数学のように変数を移項するという考え方をしないという点にも注意してください。

先ほどのケース1とケース2でプログラミングでは、右辺の内容が左辺に代入されるとお伝えしました。この式でもまず右辺の式である、x+1 が計算されます。つまり、3+1 が計算され、右辺は4になります。次に「=」の記号によって、この「4」の数値が左辺の変数xに代入され、xの中身は「4」になります。

人間の感覚であれば、本来なら下記のように書きたいところです。

x(new)=x(old)+1

でも、プログラミングでは、上記のようには書かず、

x=x+1

と書くように決められています。イメージでお伝えすると下記のような感じでしょうか。

もう1点、重要なことがあります。左辺と右辺にあるxはパソコンのメモリー上では同じ場所を使いまわしているということです。右辺のxが元々の値で、左辺のxに新しい値が入るのであれば、右辺と左辺のxは別物に思えるかもしれませんが、メモリー上ではあくまで同じ場所を使っています。同じ1つの場所を内容を書き換えながら使っているのです。そのイメージを下図に表しました。

変数xに1を加える場合、x(new)=x(old)+1 と書かずにx=x+1 と書く理由は、左辺と右辺のxは、同じ場所を上書きして使っているからということも言えますね。

元々の変数xに何か値を加える場合は x = x + 「加える値」 と書くことを覚えてください。(※)

補足:元々の変数xに何か値を加える場合、x=1+x や x=1+x+5 などのようにアレンジすることもできますが、特に数値を扱う変数の場合、上記(※)の書き方が基本となります。

ケース4も同様になります。変数xから1をマイナスする場合ですが、下記のように記述します。

x=x-1

元々の変数xから何か値を引く場合は x = x -「引く値」 と書きます。

ここまでで、数値を扱う変数の内容を更新する方法について見てきました。いかがでしょうか。数値を扱う変数の更新方法について何となくご理解頂けたでしょうか。

次に文字を扱う変数についても同様に見ていきましょう。

3. 変数の内容を更新する(文字編)

例えばResultという文字を格納する変数があって、この変数の中身を更新したいとします。文字を扱う変数を更新するとは、例えば下記のようなものが考えられます。

<変数Resultを更新するケース>
ケース1: 変数Resultに元々入っている文字を別の文字に変更する。
ケース2: 変数Resultに元々入っている文字に別の文字を連結する。
ケース3: 文字と数値や計算結果を連結して変数Resultに格納する。
ケース4: 変数Resultに元々入っている文字をクリアーする。

まずケース1についてですが、変数Resultに元々「win」という文字が入っていたとして、これを「lose」という文字に変更しようとする場合、プログラムでは下記のように記述します。

Result="lose"

これで、Resultの中身が「win」から「lose」に変更されました。文字を変数に格納する場合、文字を「"(ダブルクォーテーション)」で囲むという点を覚えておいてください。

次にケース2についてです。変数Resultに元々「win」という文字が入っていたとして、これに「-winの関係」という文字を連結してみます。この場合の書き方ですが、下記のようになります。

Result=Result & "-winの関係"

上記の式の右辺についてご説明します。右辺の「&」記号は、文字を連結する場合に利用します。また、「&」記号の前後は半角スペースを1つ開けて書きます。文字の場合もまず、右辺が先に処理されます。

元々Resultには「win」という文字が入っていますので右辺は「win」という文字と「-winの関係」という文字が連結されて「win-winの関係」となります。そしてこの右辺の処理結果が左辺の変数Resultに格納されます。

その結果、変数Resultの中身は「win-winの関係」となります。

もう1つ、記述例を見てみます。例えば下記のような式はどうでしょうか。この場合も変数Resultに元々「win」という文字が入っていたとします。

Result="You will " & Result & " the game."

上記の式では、右辺が「You will win the game.」となり、この右辺の内容が左辺の変数Resultに格納され、変数Resultの中身は「You will win the game.」となります。

変数の中身を色々と更新(変更)できるというイメージがついてきましたでしょうか。また、数値を扱う変数と同様に左辺と右辺にある変数Resultは、パソコンのメモリー上にあって、同じ1つの場所を書き換えて利用しています。

続いて、ケース3について見ていきましょう。Excel-VBAでは文字と数値を連結して、最終的に文字(文字列)にすることができ、その結果を文字を扱う変数に格納することができます。下記のプログラムを見てください。

Result="(5+3)*2=" & (5+3)*2

上記の式の右辺に注目しましょう。まず、"(5+3)*2=" の部分ですが、一見計算式に見えますが、前後を「"(ダブルクォーテーション)」で囲んでいますので、これはただの文字として扱われます。

次に「&」記号がありますが、これは文字を連結するのでしたね。「&」記号の前後は半角スペースを1つ開けて書きます。

続いて、(5+3)*2 という部分がありますが、これは通常の計算式なので、「16」と計算されます。プログラムでは式の「=」記号の右側から先に処理されるという点を思い出してください。そのため、右辺は「(5+3)*2=」という文字と「16」という数値が「&」記号により連結されます。

ちょっと不思議な感じもしますがExcel-VBAのプログラミングでは、このように文字と数値も連結して文字にしてくれるのです。最終的に右辺は「(5+3)*2=16」という「文字」になり、これが左辺の変数Resultに格納されます。

ちょっと難しかったでしょうか。このようなことができると何となくご理解頂ければ大丈夫です。

最後に、ケース4についてです。変数Resultに元々「win」という文字が入っていたとして、この変数の中身をクリアーすることを考えてみます。変数Resultのように文字を扱う変数をクリアーする場合、プログラムでは下記のように書きます。

Result=""

上記の式の右辺ですが半角の「"(ダブルクォーテーション)」を連続して2つ並べて書いたものです。2つのダブルクォーテーションの間にはスペースがない点に注意してください。このように書くことで、変数の内容をクリアーできます。また、右辺の状態を文字が1つもないということで、空文字と言ったり、Null(ヌル)、あるいは、Null(ヌル)文字と言ったりします。

いかがでしょうか。少し長くなりましたが、今回のブログでは変数の内容を更新するという部分にスポットを当てて見てきました。

次回のブログでは、実際にVBEの画面に変数を宣言して変数の内容をより明確に確認する方法について見ていきたいと思います。

お疲れさまでした。

ブログの続きはこちら

Excel VBA 入門 目次ページ はこちら

スポンサーリンク
Simplicityのレクタングル広告(大)
Simplicityのレクタングル広告(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。