もくじ
プログラム業界の掟として、新しいプログラム言語を習うときには、「Hello world!」を表示するプログラムを作ることになっているようです。(誇張あり)
実用性などは関係なく、まずプログラムが動作していることを経験すると、モチベーションも多少上がります。
プログラム例
まずは、下のコードをVBAエディタに入力してみてください。
コピペでもいいですが、なるべくキーボード入力で。
sub hello
call msgbox ("Hello, World!")
入力した文字から、自動的に次のように変化していると思います。
Sub hello()
Call MsgBox("Hello, World!")
End Sub
動かして見ましょう
ともかく実行してみます。
開発画面の▶を押してみてください。
どうでしょう?
"Hello,World!"と書かれたダイアログが出てきましたか?
[OK]を押すと、プログラムは終了します。
簡単でしたね。でもここには多くの基礎的なポイントが含まれています。
VBAエディタが教えてくれたこと
「sub hello [Enter]」と入力すると
Sub hello()
End Sub
と、変化したと思います。
- Subの一文字目が大文字になりました
- プログラム名の後ろに()
- 下に「End Sub」が現れました。
これらは、VBAのエディタを使うとVBAの約束事を自動的にクリアしてくれたということです。
一つずつ見ていきましょう
「End Sub」の追加
VBA では、1つのファイルの中にたくさんの小さなプログラム(VBAではプロシージャと呼びます)を書くことができます。
そして実行するときには「Sub プログラム名(引数)」~「End Sub」までを1つのプログラムだと判断します。
「End Sub」がないとどこまでが1区切りなのかわからないので、自動的に、最後の目印を追加してくれたわけです。
大文字小文字変換
「sub」と入力した部分が「Sub」に変化したと思います。
VBAの個々のプログラムの区切りの「Sub」(他にFunctionもあります)は頭は大文字と決まっています。
なぜ?と深く考えず、VBAというプログラム言語の決まりごとだと理解してください。
VBAのエディタは、これを自動的に修正してくれました。
()の追加
プログラム名(hello)の後ろに()が入りました。
VBAの個々のプログラムでは、プログラムを動かすときに追加情報を渡して動作を変えることができます。
例えばプログラムに「朝だよ」と追加情報を与えると「おはよう」と表示、「夜だよ」と与えると「こんばんわ」と表示するようにできたりします。
この追加情報にはどんな情報をいれられるのかを、プログラム名の後ろの()の中に入れることになっています。
プログラムが何も受け取れないときには「何もない」をはっきりさせるために()だけを書いておきます。
これも、VBAのエディタは自動でつけてくれます。
必要に応じて()の中に自分で追加情報を書いていくわけです。
なお、この追加情報は一般的には「引数」と呼ばれます。パラメータなんて説明されていることもあるかもしれません。
以後の説明では「引数」と呼ぶようにします。
プログラムの中身
次は中身を見ていきましょう。
call msgbox("Hello,Wrold!")
この部分も、VBAのエディタの自動補正で
Call MsgBox("Hello,Wrold!")
に変わっていると思います。
この行の意味
この行は
「MsgBoxというプログラムを、引数として"Hello,Wrold!"を渡して呼び出す(Call)」
という意味です。(なんかそのまんまですね。)
MsgBox()
「MsgBox()」はVBAに元々組み込まれているプログラムで、次のような動きをします。
- ダイアログを開いて引数の文字と[OK]ボタンを表示する
- [OK]ボタンを押されたら閉じる」
引数によっては、表示するボタンの数や文字を変えたり、どのボタンを押したかの情報を受け取ることもできるようです。
後々試してみたいですね。
CALL
MsgBox()を呼び出すので、呼び出し命令である「Call」を最初につけています。
けれど、VBA では Call は原則として省略可能だそうで、
Sub hello()
MsgBox("Hello, World!")
End Sub
と書いても同じ動作をします。(参考書などでは省略されていることも多いようです。)
"Hello,Wrold!"の部分
次にMsgBox()の引数部分を見ます。
引数が""にかこまれています。
""で囲まれているのは、この部分は「文字」だよという意味です。
プログラムで扱う値は、数値だったり、文字だったり、他のプログラム名だったりします。
なので、「Hello,World!」という文字であることを示すために""で囲んでいます。
もし""を取って MsgBox(hello,world!)とすると、MsgBox()というプログラムからさらに「hello」というプログラム(つまり自分)を呼び出すのだと解釈してしまいます。
なお、プログラムの説明などでは「文字」と書くと1文字だけ、またはデータの種類が「文字」であるという意味であることが多いようです。
「Hello,Wrold!」のように、いくつもの文字がならんでいるものは「文字列」と呼びます。(たて書きでも「文字行」とは呼ばないようです。「たて書きの文字列」です。)
また1文字でも「(長さ1の)文字列」と呼ぶことも多くあります。
まとめ
簡単なHello World!プログラムしたが、次のことがわかりました。
- VBAのエディタは、いろいろと自動補正してくれる
- VBA のプログラム(Sub プロシージャ)は 「Sub プログラム名」で始まって「End Sub」で終わる
- VBA のプログラムの Subは、大文字小文字にこだわる(らしい)
- VBA のプログラムを書くときは、プログラム名の後に追加情報を入れる()をつける。追加情報がないときも()だけつける。
- プログラムに渡す追加情報は「引数」と呼ばれる。
- VBAのプログラムの中から、さらに別のプログラムを呼び出せる
- プログラムの中から別のプログラムを呼び出すときは 「Call プログラム名(引数)」とするけど、CALLは省略できるので「プログラム名(引数)」だけでもオッケー
- 文字の並んでいるものは「文字列」と呼ぶ
- あるデータが文字列であることを表す
- 0 は数値の 0
- "0"は文字列の 0 (ASCIIコードの48)
次回は
VBAの四則演算とか変数についてとか、基本的なことをまず押さえていきたいと思います。