初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel(エクセル)マクロVBA入門-プログラミングの基礎4~変数とは?

変数とはデータを入れる箱!

今回は変数についてです。
変数というのはプログラム特有の概念です。そう、今日は概念のお話なのでちょっと
難しいかもしれません。ですが、変数を覚えたらもうプログラミングの半分は理解できたと
思っていいです!それくらい重要!
さっそく、前回、前々回と出てきたマクロに登場してもらいます。

Public Sub Sample()
    
    '名前格納用変数を用意してね
    Dim name As String
    
    '名前を入力してもらうウインドウを表示して、入力された名前をname変数に入れてね
    name = InputBox("名前を入力してください。", "名前の入力", "")
    
    '名前をセルに出力してね
    Sheet1.Range("A1").Value = "私は" + name + "です。"
    
    '出力が終わったというメッセージウィンドウを表示してね
    MsgBox "名前を出力しました。", vbOKOnly, "プログラム終了"
    
End Sub

上のマクロにもコメントで「名前格納用変数」なんて言葉で出ています。
ここで書いてある「name」というのが変数に当たります。
さて、変数とは?読んで字のごとく「変わる数」なんですが、数ではありません。
騙されないでほしいのは変数というのは「数」ではありません。
大事なので2回言いました。

「箱」のイメージを持ってください。変数とは・・・

「データを入れておく箱のようなもの」

f:id:drumer2sh:20130718172419p:plain

まぁ不思議箱です(笑)ちゃんと専門っぽく言うと、
「コンピュータ上のメモリに任意のデータを保持し、扱うために名前を付けたもの。」
となるんですが、こんな風に理解しなくてもいいです。イメージで理解しましょう!
なので先ほど言ったように「データを入れる箱」でイメージしてください。
この不思議な箱のようなものである変数にはちょっとした特徴があります。

  • 名前を結構自由につけれます。(名前付けのルールはあります)
  • プログラムが終わると、自動的に消去されます。(だいたいは)
  • 1度データを変数(箱)に入れると、プログラムが終わるまでずっと持ってます。
  • プログラムが終わるまで自由に出し入れできます。
  • 箱にはどんなデータを入れることができるか指定できます。(データ型)
  • 変数は使える範囲が決まっています。(スコープと言います)

というような特徴があります。では1つ1つ話しましょう

名前を結構自由につけれます。(名前付けのルールがある)

変数に名前を付ける場合、

  • 数字から始まる名前はつけられない。
  • 全角文字は使えない。
  • -や+,!などの記号は使えない(_は使える)

などのルールがあり、それを守れば、どんな名前でも付けられます。
ちなみにVBAでは全角文字の名前の変数も作れますがこれは付けない方が無難です。
なぜなら日本語(全角文字)自体が日本でしか通用しない特有のものだからです。
つまり、日本語名のついた変数で作られたプログラムは日本でしか使えないということなります。
これは非常にデメリットです。したがって基本的には半角英数字でつけましょう。

プログラムが終わると自動的に消去されます。

変数はプログラムが終わると、必要がないので消えてしまいます。
またプログラムが開始すると、新たに作られます。
これは箱を作る数には限りがあるからです。
コンピュータにはメモリという記憶する場所があります。
この記憶する場所は広さが決まっていてデータを記憶、
つまり箱にデータを入れるたびに場所は埋まります。
ずっと入れっぱなしだといつしか場所がなくなってしまうので、
その都度削除して場所を空けているのです。

1度データを箱に入れると、プログラムが終わるまで消えません。

箱にデータを入れるとその箱に他のデータを入れない限り、ずっとその箱は入れたデータを
明示的に捨てない限り、プログラムが終わるまでずっと持っています。
例えばaという箱に123という数値が入っていたら、
プログラムが動いているときは、箱aはずっと123として使えるということです。

プログラムが終わるまで自由に出し入れできます。

箱aには123が入っているのでいつでも自由に取り出して使うことができます。
例えば、前回学んだ出力の命令を使って・・・

Sheet1.Cells(1, 2).Value = a

とすると、セルA2(1行2列目)にaの中身である123が出力されます。

1つの箱には1つのデータしか入れることができません。

箱の中には1つのデータしか入れることはできません。
間違えないで欲しいのは1つのデータであり、1ケタではないということです。
今箱aには123というデータが入っていました。ではこうしたら箱aの中はどうなるでしょうか?

a = 456

こうすると、箱aの中には先ほど入っていた123は消えてしまい、
456というデータが改めて箱の中に入ります。
注意してほしいのは決して123+456で579にはならないということです。
こういう場合は、きちんと計算した結果を箱に入れてあげる必要があります。
以下のようにします。

a = a + 456

これ、変ですよね?このあたりが変数特有の感覚なので
しっかり身に着けてくださいね。これは・・・

「箱aの中に入っているデータと456を足して改めて箱aに入れなおせ」

という意味になります。ですので例えば変数を1ずつ動的に増やしたい!
なんて時は・・・

a = 0
a = a + 1
a = a + 1
・・・
・・・

という風にすればよいですね。プログラムは上から順番に実行しますから、
最初に箱aに0が入って、次で箱aに1が入って、次に2が入って・・・
というように箱の値を次々と入れ替えることができます。
変数の大きな特徴の1つですのでこの感覚をよく覚えてください。

箱にはどんなデータを入れることができるか指定できます。(データ型)

またまた、最初のコードに登場してもらいます。

Public Sub Sample()
    
    '名前格納用変数を用意してね
    Dim name As String
    
    '名前を入力してもらうウインドウを表示して、入力された名前をname変数に入れてね
    name = InputBox("名前を入力してください。", "名前の入力", "")
    
    '名前をセルに出力してね
    Sheet1.Range("A1").Value = "私は" + name + "です。"
    
    '出力が終わったというメッセージウィンドウを表示してね
    MsgBox "名前を出力しました。", vbOKOnly, "プログラム終了"
    
End Sub

これの1行目がちょうど、この性質を表しているコードです。
つまり、「Dim name As String」です。
これは、「nameという名前の変数(箱)をString型で作ってね」という意味になります。
となります。このString型というのはデータ型と言います。また後の回で説明しますが
この箱には文字列を入れる箱ですよー。という意味になります。
このようにいろんなタイプの箱を作ることができますよ。ということですね。

ちなみに、ちゃんとした言葉っぽくいうと。

変数の作成は「宣言」
変数に値を入れる「代入」
変数を使って出力したりすること「参照」

と言います。

変数は使える範囲が決まっています。(スコープと言います)

変数は宣言した場所によって、使える場所が決まってきます。
先ほどの例であれば、プロシージャの中で宣言しているので、
使えるのはこのプロシージャの中だけになります。もちろん、複数のプロシージャで
使用できる変数を宣言することもできます。
このように、使える範囲のことをスコープと言って、使える範囲を限定することで、
変数が乱雑にならないようにしています。

これが変数です。ほぼプログラミングでは日常的に使用するので、
しっかりとものにしてくださいね!
わからなければコメントくださいー。

かしこ