VBAなどプログラムを学ぶなら、避けては通れない基本の1つが変数です。
「変数?単語を聞いただけで難しそう・・・」となるかもしれません。でも、プログラムを勉強していると、初めて聞く言葉や、難しそうな固い言葉がよく出てきてきます。ここで拒絶しないで、気楽に受け入れていくとスムーズに学習できます。
また、エクセルVBAの参考書では全てを説明しようとしすぎて、逆に初めて勉強する人には理解しにくくなっています。
そのため、このページでは変数の基本部分にしぼって、くわしく説明していきます。わかってしまえば簡単なので、さっそく変数について説明していきます。
変数って何?
プログラムの中では、いくつもの数値や文字が使われます。
変数は、そのいくつものデータを忘れないように、保存しておくための場所です。日常生活で忘れないように、メモ書きをするのと同じと思ってください。
たとえば買い物に行く時、次のようなメモを書いて忘れないようにすると思います。
プリン 3つ
このメモの「おやつ プリン3つ」を、エクセルVBAで忘れないようにするには、次のように変数に保存します。
1 2 3 4 5 6 7 |
Dim oyatuSyurui As String Dim oyatuKazu As Integer oyatuSyurui = "プリン" oyatuKazu = 3 |
簡単に説明すると、おやつの種類は「プリン」、おやつの数は「3」とそれぞれ変数に保存しています。
詳しい内容はこれから説明するので、今は「ふーん」と軽く流してOKです。
変数を使う時は宣言する
Dim 変数名 as データ型
これまでの説明で、変数はデータを保存できる(忘れないためのメモ書きと同じ)と言いました。でも、その変数を使いたい時は、まず使う前に「こんな変数を使うよ!」と宣言して、エクセルに教えてあげる必要があります。
プログラムでは1つの値を保存するのに、それぞれ変数を準備します。今回の例では最初の2行で、「おやつの種類」「おやつの数」を保存する変数を、それぞれ準備(宣言)しています。
1 2 3 4 |
Dim oyatuSyurui As String 'oyatuSyuruiは、おやつの種類を保存する変数 Dim oyatuKazu As Integer 'oyatuKazuは、おやつの数を保存する変数 |
エクセルに教えてあげる時の書き方が「Dim 変数名 as データ型」となります。
もう少しくだいて説明すると、
- 「Dim 変数名」は「こんな名前の変数を使うよ」
- 「as データ型」は「こんな種類のデータを保存するよ」
と言う意味になります。
それでは、この「変数名」と「データ型」について、説明していきます。
変数名は意味のわかる名前にする
宣言する時の変数名は、意味のわかる名前にし、アルファベットで定義しましょう。
日本語でも変数名を定義できますが、コーディングに慣れてくると不便に感じます。アルファベットだからと言って、英単語にする必要はありません。ローマ字表記でOKなので、アルファベットを使う習慣をつけてください。
時々、変数名にaやbなど付ける人がいます。せめて略称でもいいので、意味のあるアルファベットを使ってください。後で見た時に意味が分からなくて後悔するのは自分です・・・
データ型を指定する
変数を宣言する時に、変数にどんなものを保存するか、エクセルにあらかじめて教えておきます。そうすることで、プログラムでミスがあった時も、エクセルが教えてくれるので修正がスムーズにできます。
このデータ型には、色々な種類がありますが、最初はよく使われる次の2つ(Long型,String型)だけ理解しておけばOKです。(参考書では全てのデータ型を説明するので、初めてプログラミングを勉強している人がキツク感じるところです・・・)
まずは理解したい2つのデータ型
長整数型(Long) | 個数や点数など、数値を保存する時に使います。 -2,147,483,648~2,147,483,647の整数を保存できます。 |
---|---|
文字列型(String) | 名前や住所など、文字を保存する時に使います。 |
長整数型(Long)で保存できないような大きな整数、小数点以下のある数、また日付や時間などを保存するデータ型も、VBAでは準備されています。でも最初のうちは、ここで紹介した長整数型(Long)と文字列型(String)だけで十分です。
実はエクセルVBAでは宣言しなくても変数が使えます。一部のウェブサイトでは、宣言は不要と書いているところもあります。「じゃあ、なんでわざわざ宣言するの?タイピングが増えてめんどくさい」と思うかもしれません。
でも、タイピングが増える以上のメリットが、変数の宣言にはあります。
変数を宣言する具体的なメリットは、別の記事で詳しく解説するので、最初のうちはルールと割り切って、宣言もコーディングしてください。
変数にデータを保存する
変数名 = 保存したい値
変数にデータを保存する時は、=を使います。
この=の書き方は要注意です!ここでつまずく人が多いです。
日常生活では、1+1=2は「左の計算結果が右の数になる」という意味になります。
VBAの=は意味が違い、「右の値を左の変数に保存する」という意味になります。
今回の例では4~5行目で、「プリン」をoyatuSyuruiに、「3」をoyatuKazuにそれぞれ保存しています。
1 2 3 4 |
oyatuSyurui = "プリン" 'おやつの種類を保存 oyatuKazu = 3 'おやつの数を保存 |
保存したということは、後でおやつの情報を知りたくなった時、変数oyatuSyurui、oyatuKazuの中身を調べれば「プリン」「3」とわかります。
また「保存したい値」の書き方ですが、数値と文字で書き方が違います。
数値の場合はそのまま数値のみ書きますが、文字列の場合は”(ダブルクォーテーション)で囲んで書きます。今回の例だと、プリンは文字列なので”で囲んで”プリン”、3は数値なのでそのまま3とプログラムはなっています。
おまけ(ちゃんと保存できたか確認)
「言われたとおりプログラムしたけど、ちゃんと保存できたの?」と疑問に思うと思います。
MsgBoxという命令を使って、確認してみましょう。MsgBox は引数で渡されたデータを、メッセージボックスで表示してくれます。
プログラムの最後にMsgBoxを追加して、次のように修正してください。(今回のプログラムの処理名はSetHensuとしています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub SetHensu() Dim oyatuSyurui As String 'oyatuSyuruiは、おやつの種類を保存する変数 Dim oyatuKazu As Integer 'oyatuKazuは、おやつの数を保存する変数 oyatuSyurui = "プリン" 'おやつの種類を保存 oyatuKazu = 3 'おやつの数を保存 MsgBox oyatuSyurui MsgBox oyatuKazu End Sub |
修正後、プログラムを実行してみましょう。
Sub SetHensu()とEnd Subの間をクリックして、実行したい処理の中にカーソルを移動します。その後、画面上にある右三角のボタンをクリックすると、プログラムが実行されます。
実行すると、次のようにメッセージボックスが2回表示され、変数の中身「プリン」と「3」が正しく表示できたらOKです。
メッセージボックスに何も表示されない場合は、変数の宣言部分、変数に値を保存している部分、MsgBoxの引数部分、どこかで変数名のつづりが間違っている可能性があります。見直してみてください。
まとめ
今回、変数について説明した内容です。
- 変数は使う前に宣言する
- 変数宣言の書き方は、 Dim 変数名 as データ型
- 変数名は意味のわかる名前で、アルファベットで書く
- 変数は何を保存するかわかるように、データ型(Long,String)も指定する
- 変数にデータを保存する時は=を使う(※右から左)
- 変数にデータを保存する時、数値はそのまま、文字は”で囲む
今回の説明では、わかりやすくするため「変数に保存する」と表現しましたが、一般的に「変数に代入する」と言うことが多いです。
また、変数の理解は使いながら、だんだんと慣れていけばOKです。いきなり100%理解する必要はないので、安心して、次へと進んでいきましょう。