前回の記事はこちら
VBEを起動する
さて、VBAを書く前に。前回までの記事で、少しずつ「VBA」や「マクロ」、「VBE」などの言葉と解説が出てきましたね。
それぞれどんなものか、今から30秒ほど頭の中で思い出してみてください。
VBAとは?マクロとは?VBEとは?
こんな感じで、新しいことを学ぶと必ず「モノの名前」を覚える必要が出てきます。
必ず一度で覚える必要は無いですが、「これってどういうものだっけ?」と、「思い出す努力」はこまめにしていくことをオススメします。
何度も思い出すうちに、スムーズに名前とその意味が一致してきます。
そうなるとさらに新しく覚えることもどんどん吸収していけますので、意識的に思い出す時間は作りましょう。
話が逸れましたが、いよいよVBAを書いてみましょう!
まず、Excelファイルを開いて、VBEを開いてください。
この画面がVBEでしたね。
(Excelファイルの開発タブからVisual Basicをクリックすると開けますよ)
ちなみにVBEとは、Visual Basic Editorの略です。
プログラミング言語を書いてプログラムを作成するのに使うソフトのことを「エディタ」と呼びます。つまりVBEはVBA専用のエディタです。
VBEを開いたら、上画像の赤枠部分をクリックしてください。
すると上図のように、フォルダのようなアイコンのものが出てくるので、さらに赤枠部分をクリックしてください。
今度はSheet1や、ThisWorkbookというものが出てきましたね。
これから書くものは、基本的に「ThisWorkbook」の方に書いていきますので、ThisWorkbookの方をクリックしてください。
正しく選択出来ていると、ウィンドウの一番上、画像の赤枠の部分が
今開いているファイル名.xlsx-[ThisWorkbook(コード)]
という風に表示されるはずです。
(試しにSheet1の方をクリックすると、その部分の表示が変化します。)
一旦「ThisWorkbookって何のこと?」というのは置いておいて、お待たせしました。VBAを書いてみましょう。
初めてのマクロ:セルに値を代入する
では、Option Explicitと表示されている画面に、以下のように書いてみてください。
Option Explicit
Sub セルに値を代入
ここまで書いてEnterキーを押すと、自動的に
こんな風に、「セルに値を代入」の右に()が付いたり、下に「End Sub」が追加されます。
「Sub」が「ここからマクロの処理を書くよ」という意味で、
「End Sub」が「ここまでがマクロの処理だよ」という意味です。
つまり、「Sub」の次の行からマクロで実行したい処理を書いていき、「End Sub」で終わる、ということになります。
試しに、Subの次の行に
Range("A1").Value = 1
と書いてみてください。
書けたら、下の画像のように、VBEのウィンドウとExcelファイルのウィンドウを並べてみてください。
Windowsキー+左右のキーで、画面の左右半分ずつのサイズでウィンドウを配置出来ます。
この状態に出来たら、VBEのウィンドウを選択し、「F5キー」を押してみてください。マクロが実行されます。(画面上部の三角印のボタンを押してもOKです)
・・・さて、実行後、何も起こっていないように思うかもしれませんが、ExcelファイルのA1セルを見てみると、「1」と入っていますよね!
何となく分かるかもしれませんが、
Range("A1")
と書いていたのは、「A1セル」という意味でした。
また、
Value
の部分は「値」という意味です。和訳まんまですね。
Range("A1")とValueの間の「.」(ピリオド)は、「~の」という意味だと思ってください。
これらの意味をつなげると、「=」の左側は
「A1セルの値」
という意味になります。
ここで数学の知識がある方なら、
「え?A1セルには何も入ってなかったんだから、『A1セル=1』っておかしくない?」
と思われるでしょう。
実はVBAで書く「=」には2つの意味があり、この書き方であれば、
「=の右に書かれているものを=の左側に代入する」
という意味になります。
よって、書いたVBAの
Range("A1").Value = 1
は
「A1セルの値に1を代入する」
という意味になり、実行すると実際に1が代入された、ということです。
「Range("A1").Value」の「A1」を「B1」に変えたり、「A2」に変えたりしても、ちゃんと1が代入されます。
また、「=1」の「1」を「100」や「0.1」に変えても、ちゃんと代入されますね。
思考・検索トレーニング!
では、以下のように書き変えて、F5キーでマクロを実行してみてください。
Range("A1").Value = あ
これまで通りであれば、A1セルに「あ」と入力されるはずですよね。
しかし、以下のようなエラーが出ます。
「コンパイルエラー?!なにそれ!?」
と驚かなくて大丈夫です。
とりあえず、OKをクリックしてください。
VBE上も、いかにも「ここエラーですよ!!」みたいな色の変化があると思いますが、この状態だとマクロが実行出来ないので、赤枠の四角マークをクリックしてください。そうすることで、マクロの処理を停止させられます。
VBAを実行した際、間違った書き方をしていると、このようにエラーメッセージが表示され、マクロの処理が途中で止まることがあります。
エラーは出てはいけないと思われがちですが、初心者のうちはむしろたくさんエラーを出して、「こうするとエラーになるんだな」ということを身をもって学んでいきましょう。
では、ここで考えてください。なぜ、エラーになったんでしょう?
Range("A1").Value = 1
などは問題なく実行出来ました。
セルの場所を変えても問題無く動いたし、1を100に変えても0.1に変えても問題ありませんでした。
そうなると、「あ」という文字を代入しようとしたことが原因かな?
という考えになりますね。
では、「セルの値としては、数字しか入れられないの?」と思うかもしれませんが、Excelのセルに文字が入力出来ないなんてことはありません。
このように、プログラミングをする中で、
「あれ?上手くいかない」
と思うことは頻繁にあります。そんな時に頼るのがGoogleですね!
というわけでGoogle(Yahooでも何でも良いですが)を開き、こんな風に検索してみましょう。
「VBA セル 文字 代入」
するといっぱい記事が出てきますが、広告以外のページであればどれでも大丈夫です。開いて読んでみて、自分なりに実行してみてください。
…出来ましたか?絶対に検索して、自分で解決してから続きを読んでくださいね?
では出来たと信じて、解説します。
数値と文字列の違い
さて、先程エラーが出た書き方はこうでした。
Range("A1").Value = あ
正しくは、こうする必要がありました。
Range("A1").Value = "あ"
「あ」ではなく、「"あ"」としなければいけないんですね。
理由は、「あ」だと、「あ」という文字なのか、別の意味を持つ何かなのか、コンピュータが判断出来ないんですね。
「じゃあ数字は何で大丈夫だったの?」
と思いますよね。
数字はあくまで数字であり、別の意味を持つことは無いからです。
平仮名だけでなく、アルファベットやカタカナ、漢字などの文字を「文字として使うよ!」とコンピュータに理解させるために、""を付ける必要がある、と覚えておいてください。
詳しくはご自身でさらに調べていただいても良いですが、のちのちまた解説します。
少し長くなりましたが、ひとまず初めてのマクロ作成はここまでにして、ファイルを保存して終わるとしましょう。
マクロファイルを保存しよう!…でも要注意
さて、ファイルを保存しましょう。
VBEはそのままバツ印で閉じて大丈夫です。
VBAはExcelファイルに保存されるので、VBE上で保存する操作等は必要ありません。
Excelファイルを上書き保存なり名前を付けて保存しよう…とすると、以下のようなメッセージが出ます。
要は、「ただのExcelファイルにはマクロを保存出来ないよ」ということです。このままだとせっかく作ったマクロが保存出来ません。
保存するためには、まず名前を付けて保存の画面にいきます。
上のような画面で、赤枠の部分をクリックします。
するとずらっと色々出てきますが、その中の
「Excelマクロ有効ブック」
というものを選択し、保存をクリックしてください。
すると、保存した場所に「マクロが有効になったExcelファイル」が保存されているはずです。
Excelファイルでマクロが有効になったファイルは拡張子が「xlsm」となっています。
ファイル名に拡張子が表示されていない人は、
「ファイル名 拡張子 表示」
などで検索してみてください。拡張子は表示しておく方が色々楽になります。
このように、Excelファイルにマクロを作って保存する場合、「マクロ有効ブック」として保存する必要がありますので、くれぐれもご注意ください。
マクロをようやく作り終えて、しっかり保存できていないままファイルを閉じてしまうと、せっかくの苦労が水の泡ですので…。
というわけで、初めてのマクロ作成お疲れさまでした!
初めてマクロを作成される方向けにかなり丁寧に解説してきましたが、ここまでで解説した基礎は「理解しているもの」として次に進みます!
もし分からないことがありましたら、有料サポートをご利用下さい。
長くなりましたが、最後までお付き合いありがとうございました!
次の記事はこちら。