第2講 変数を理解しよう!

第1話 変数とは?
第2講では、変数について学習します。
プログラムの学習では、変数や関数という項目が出てきます。
変数や関数というと、顔をしかめる人もいらっしゃるかもしれまんが、
苦手意識を持つ必要はありません。
変数も関数も数学の変数や関数とは違います。

変数については、数字や文字を入れるラベル付きの箱、
関数とは、プラモデルの各部品に相当するものというイメージで十分です。
関数(VBAでは、Subプロシージャ、
Funcitonプロシージャといいます。Funcitonは関数の意味です。)
については、後に講をもうけて詳しく学習します。

ラベル付きの箱とは、どういう意味でしょうか。
変数には名前が付いています。
これを比喩的にラベルといっています。
p1
変数は、数字や文字を入れますが、基本的に1個しか入りません。
p2例えば、変数aに1が入っているとします。
これにさらに2を入れようとすると、
p3
1は箱から出ていてしまいます。
そして、数字や文字は箱の中でしかいきられませんので、
箱から出た瞬間に消滅の憂き目にあいます。
文字についても同じです。
p4
変数を正確に言うと、
メモリーが割り当てられ、そのメモリーにデータが出入りするということですが、
箱にデータが出入りするの理解でまったく問題ありません。

変数を使うときには、変数の型を宣言します。
例えば、整数型の変数aを宣言するときは、
Dim a As Integer
と宣言します。Dimは宣言するの意味で、Integerは整数です。
ですから、aを整数として宣言する(定義する)という意味になります。
文字型変数を宣言するときは、
Dim a As String
です。

では、変数を利用したプログラムを早速作ってみましょう。
エクセルを起動してから、第1講の要領で実行ボタンを作りましょう。
p5実行をダブルクリック!
次のようにコーティングして、
Private Sub CommandButton1_Click()

  Dim a As String

  a = "VBAの世界にようこそ!"
  Cells(5, 1) = a

End Sub
p6
カーソルが赤い枠の中にあることを確認してから
(もし外にある場合はPrivateとEndの間をクリックしてにカーソルが来るようにしてください)
ボタンp7をクリックします。
Alt+F11でエクセルに戻りましょう。
p8となっています。
これからこのコードをいじっていきますが、その前に消去ボタンを作り、
p9とコーティングし、カーソルが間にあることを確認して、
ボタンp10をクリックします。
すると、p11と先の『VBAの世界にようこそ!』が消えています。

さて、プログラムコードを次のように変更して実行ボタンを押してみましょう。
Private Sub CommandButton1_Click()

  Dim a As String

  a = "VBAの世界にようこそ!"
  Cells(5, 1) = a
  Cells(6, 1) = a
  Cells(7, 1) = a
  Cells(8, 1) = a
  Cells(9, 1) = a

End Sub
すると、
p12となっています。
変数を使わなければ同じ結果を得るためには、
Private Sub CommandButton1_Click()

Dim a As String

  Cells(5, 1) = "VBAの世界にようこそ!"
  Cells(6, 1) = "VBAの世界にようこそ!"
  Cells(7, 1) = "VBAの世界にようこそ!"
  Cells(8, 1) = "VBAの世界にようこそ!"
  Cells(9, 1) = "VBAの世界にようこそ!"

End Sub
変数を使ったコードの方がすっきりしています。
変数を使う意義はこれにつきません。

例えば、コードを次のように変更して実行ボタンを押してみましょう。
Private Sub CommandButton1_Click()

  Dim a As String, b As String, c As String

  a = "VBAの世界にようこそ!"
  b = "VBAの学習は楽しい。"
  c = "エクセルの世界が広がります。"
  Cells(5, 1) = a
  Cells(6, 1) = a + b
  Cells(7, 1) = a + b + c

End Sub
実行結果
p13
そうです。文字の足し算が出来るのです。
これを利用して、
性格の診断をして、次のように表示するコーティングを考えてみてください。
p14
尚、Dim a As String, b As String, c As Stringは
Dim a As String
Dim b As String
Dim c As String
宣言するのと同じです。
VC++あたりでは、
int a,b,c
とするとa,b,cを整数型として宣言できるのですが、
VBでは
Dim a,b,c As String
という簡略表現が認められていません。
面倒ですが、Dim a As String, b As String, c As Stringと宣言するしかありません。

変数名について、一言付け加えておきましょう。
入門書や入門サイトでは、
人の名前の変数名ならName、年齢ならAgeなどと書くことを推奨しています。
ところが、初心者はこのように書かれてしまうと、
Dim Name As String
この文には、2種類の単語が入っていることがわからなくなってしまいます。
Dim Name As String
ピンクの部分は、
VBAの文法で定められた単語でこれは必ずこのように書かなければなりません。
つまり、文法的に意味が定められています。
こういう単語を予約語と呼ぶわけですが、
予約語と名前の区別がつかなくなってしまいます。
変数名は、ただの名前です。
そして、変数名には他と区別するという以外は意味がありません。
『ポチ』は他の犬と区別するために付けられたものにすぎず、
『ポチ』という名前自体には意味がありません。
変数名も他と区別するという意味以外には意味をもっていないのです。
同様な箱が2つあって、
箱に何も書かれていなければ、
2つの箱を区別できません。
区別するために『本』『洋服』などと名前をつけます。
その名前が変数名です。
2つを区別する、それ以外の意味は変数名にはありません。
ところが、
英単語で書かれてしまうと初心者はそれ自体に何か意味があると思ってしまいます。
つまり、意味を持つ(文法的に意味をさだめられた)予約語と
意味のない変数名の区別がつかなくなってしまいます。
これが、入門と銘打っていながら初心者には難解になっている理由のひとつです。
ですから、このサイトでは変数名には基本的に英単語は使いません。
Dim w As String
などとしています。そして、もちろんwは適当に付けた名前ですから、
Dim a As String
でも
Dim x As String
でもよいのです。名前ですから自由に付けられるのです。
そして、名前の唯一の意味は、
wとaとxを区別するということであり、それ以上の意味はないのです。
引っ越しの時に、本や下着などを段ボールに入れて、
それぞれにマジックで本、下着などと書き込みますね。
変数名はそれと同じです。
変数という箱にマジックで書いた名前にすぎないのです。
変数名にはそれ以上の意味はありません。
ですから、
例えばa_threadのような意味ありげな名前にする必要などさらさらないのです。
aで十分です。
変数名をa_threadなどと書くように書籍などが推奨する理由は、
何の変数だったかわからなくなるからとしていますが、
例えNameなどとしても長いプログラムを書いていく内に、
結局何の変数であったかわからなくなる点は、
ほんの少しの違いもありません。
ですから、注釈文を入れて説明するようにした方がよいと考えます。
Private Sub CommandButton1_Click()

  Dim a As String  'aは人間の名前

  a = "太郎!"
  Cells(5, 1) = a
  Cells(6, 1) = a
  Cells(7, 1) = a
  Cells(8, 1) = a
  Cells(9, 1) = a

End Sub
'aは人間の名前 が注釈文です。
コンピュータは'のついている文を読み飛ばします(無視します)ので、
プログラムには何の影響も与えません。
これは何のためにあるかと申しますと、
プログラムを読む人のためのものです。
注釈文をコピペであちらこちらに貼り付けておく方が、
ずっと合理的です。

禁則さえ犯さなければ、変数名は自由に付けられます。
禁則に反するものは、
1a,/a,a\,a-b
などです。数字は先頭に来てはいけません。
そして、/、\、-などはは名前に使ってはいけません。
使えるのは、アルファベットと数字と_(アンダーバー)だけです。
さらに、一般のプログラム言語(C言語、パスカル、VBなど)では全角の文字も禁止です。
ところが、幸いなことにVBAでは全角をつかってもいいことになっています。ですから、
Dim 名前1 As Integer
などが認められるのです。
慣れるまでは変数名は2文字以内の半角アルファベットか漢字を使うことをお勧めします。





第1講第5話へ 第2話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
数学研究室に戻る