エクセルをマクロ有効ブック形式で保存しよう
エクセルでVBAを使うには、「マクロ有効ブック」形式で保存する必要があります。
エクセルの上部に、「画像1」のようにファイル名があると思います。
そのファイル名の最後が「.xlsx」になっていると思います。
※ファイルをまだ保存してなければ「Book1」と表示されています
このままだとプログラムを実行する事ができません。
よって、VBAが実行可能な形式に変更します。
まだファイルを保存してない場合も、同じ手順で実行可能な形式で保存します。
エクセルのタブから「ファイル」を選択します。
左メニューの「名前を付けて保存」を選択します。
保存する場所はどこでも構いませんが、とりあえず現在保存されているエクセルと同じ場所に保存します。
保存用のウインドウが表示されます。
「画像5」にあるファイル名の横の下向き矢印のアイコンを選択します。
すると「ファイルの種類」から一覧が表示されます。
この中の「Excel マクロ有効ブック(*.xlsm)」を選択します。
するとファイル名の横が「画像6」のように「.xlsm」に変わりました。
※ファイル名の最後に付く「.***」を拡張子といいます
変わったのを確認したら「保存」を選択します。
これでVBAを実行できる形式で保存できました。
エクセルを開く際、「セキュリティの警告 マクロが無効にされました」というメッセージが表示されます。
こちらは「コンテンツの有効化」を選択する事で、VBAを実行する事ができます。
VBAのコードを入力してみよう
VBAが実行できる形式に保存できたら、いよいよプログラムを書いてみます。
モジュールを追加する
「開発」タブから「コードの表示」を選択します。
すると別ウインドウが表示されます。
これは「VBE(Visual Basic Editor)」と呼ばれるVBAの統合開発環境です。
統合開発環境は「IDE(Integrated Development Environment)」とも呼ばれ、プログラミング開発する上で、様々な役立つ機能が含まれています。
この画面からプログラムを記述します。
まずプログラムを書く前に「モジュール」を追加します。
とりあえずは、プログラムを書く場所、という理解で大丈夫です。
「画像9」のように、「プロジェクト – VBAProject」の子ウインドウ内で右クリックします。
するとメニューが出てくるので、「挿入」から「標準モジュール」を選択します。
「標準モジュール」として「Module1」が追加されます。
この「Module1」をダブルクリックします。
すると真ん中のウインドウが「Module1」用にVBAを記述できるようになります。
この空白スペースにVBAのプログラムを記述します。
VBAの基本記述方法、プロシージャ・関数について
では実際にVBAを記述します。
まずはVBAの基本的な書き方です。
Sub プロシージャ名()
※「Sub」 ~ 「End Sub」の間にプログラムを記述する
End Sub
いろいろな書き方がありますが、まずは上記の書き方から覚えましょう。
まず1行目で「Sub プロシージャ名()」と記載しています。
これはプログラムを実行する際には必ず必要です。
この「プロシージャ名」の部分は、プログラムを書く人が自由に決めます。
一部で使ってはいけない文字がありますが、その場合はエラーになります。
特にここでは詳しく解説しません。
「プロシージャ (procedure)」とは、プログラミング用語で、プログラムにおける、処理をまとめたものです。
日本語では「手続き」とも訳されます。
また、「プロシージャ」は「ユーザー定義関数」とも呼ばれ、単に「ユーザー関数」や「関数」とも呼ばれています。
多くのプログラミングでは、「プロシージャ」よりも「関数」と呼ばれる方が一般的かもしれません。
エクセルには標準で関数が使われています。
例えば、数字の合計を計算する「SUM関数」などがあります。
こうした元々エクセルに標準で実装してある関数を「標準関数」や「組み込み関数」とよび、ユーザーがVBAで作成した関数は、「ユーザー定義関数」や「ユーザー関数」と区別して呼ぶ事ができます。
3行目の「End Sub」は、関数の終わりに必ず書きます。
したがってプログラムは、「Sub」 ~ 「End Sub」の間に記述します。
VBAを記述して、メッセージボックスを実行する
「プロシージャ」や「関数」は少し難しい話だったかもしれません。
なるべく現段階で難しい用語などは省きたいですが、大事な事は少しづつ解説していきたいと思います。
プログラムを書く内に、徐々に用語や操作などは身についてくるものです。
というわけで、実際にプログラムコードを以下のように書いてみましょう。
Sub test1()
MsgBox ("HELLO!<1>")
End Sub
これはメッセージボックスを表示させるプログラムです。
「MsgBox」という標準関数を使ってメッセージボックスを表示させます。
メッセージボックスにはメッセージが必要です。
メッセージは「HELLO!<1>」になります。
記述したら、こちらの「test1」の関数を実行してみましょう。
「画像12」のように、マウスカーソルを「Sub test1()」~「End Sub」の間に表示させます。
これは、現在は1つの関数しかありませんが、複数の関数が記述されていた場合、どの関数を実行するか選択するためです。
マウスカーソルをtest1関数内に表示させたら、上のメニューにある再生のようなマークの実行アイコンをクリックします。
実行すると、エクセルのブック内でメッセージボックスが表示されればOKです。
最後にメッセージボックスの「OK」を押して閉じ、書いたプログラムを保存しておきましょう。
<補足情報>
いくつか補足情報を掲載します。
「MsgBox」のカッコについて
test1関数では「MsgBox (“HELLO!<1>”)」と記載しました。
しかしこの中に省略できるものがあります。
それは()括弧です。
以下のtest2関数をご覧下さい。
こちらは「MsgBox “HELLO!<2>”」と記述され、括弧が省略されています。
Sub test1()
MsgBox ("HELLO!<1>")
End Sub
Sub test2()
MsgBox "HELLO!<2>"
End Sub
どちらも同じように動作します。
恐らく多くの人は括弧を省略して書いていると思いますので、省略して書いて問題ありません。
ただし、省略できないケースがありますので、今は省略できる事と、省略出来なケースがある事だけ覚えておきましょう。
マウスカーソルが関数内に無い場合に、関数を実行した時
「画像12」では、マウスカーソルが関数内に表示させて、実行アイコンをクリックするよう解説しました。
それでは、マウスカーソルが関数の外にある場合、実行アイコンをクリックするとどうなるでしょう。
「画像15」のように、マウスカーソルを関数の外に出して実行してみます。
すると、「画像16」のような子ウインドウが表示されました。
先程の場合だと、どの関数を実行すれば判断がつかなかったので、このウインドウから改めて「test1」「test2」の実行したい関数を選択して、「実行」をクリックします。
こうする事で、実行したい関数だけを実行する事が可能です。