「エクセルを、自動化せよ」
連載:
エクセルで始める!VBAプログラミング入門
(Excelの作業を自動化できる、プログラミング超入門講座)(第2回)マクロの中身を解明!初めてのVBAに挑戦!
【連載】
▼この連載は、ベネッセUdemyにて発売している動画コースの内容から一部を記事にしているものです。
動画でもっと分かりやすく勉強したい方は、こちらもご覧下さい。
(この連載限定で●%割引となります)
クマに教わり、「マクロの記録」ができたマーク。
さっそく調子に乗ってきたが・・・?
[前回までのあらすじ]
カフェの店長マークは、突然あらわれたクマに、エクセルを自動化する「マクロ」を教わることに。
まずはボタンをクリックするだけでマクロを作成できる「マクロの記録」という便利な機能を使い、マクロを作成することに成功した。さっそく調子に乗ってきたマークだが・・・?
「確かにマクロはできた。 だが、マクロの中身がどうなってるか まだ理解していないだろう?」
では、教えてもらおうか。
マクロの天才、この私に!」
(0)今回の実習内容
今回の実習内容はこちらです。
(1)実習ファイルをダウンロードしてみよう!
パソコンで以下のファイルをダウンロードして、実習を行うことができます。
(2)マクロの編集画面(VBE)を開いてみよう
マクロの中身(VBA)を編集する画面を、「VBE」(Visual Basic Editor)と呼びます。
もともとExcelとは関係がなく、プログラマーさんがソフトウェアなどを作るためのプログラミング言語として「Visual Basic」というものがありました。その後、このVisual Basicを、ExcelやWordなどのOfficeソフトを自動化するために利用されたものが「Visual Basic for Application(略してVBA)」なのです。
つまり、Visual Basicを編集する(Edit)ための画面だから、「Visual Basic Editor」というわけですね。
[やってみよう]
①「開発」タブの「Visual Basic」ボタンをクリックして下さい。
※ショートカットキーとして、[Alt]+[F11]キーでも同じ操作ができます。便利なので覚えておきましょう。
②このような画面が起動します。これがVBEです。
(3)マクロは1つ1つの部品(モジュール)からできている
まずはここを見てみましょう。「VBAProject」「標準モジュール」などと書かれていています。
プロジェクトとか、モジュールって何なの?
マクロを構成している全体像が「プロジェクト」、その基本単位が「モジュール」という意味です。
- 自動車=プロジェクト
- 1つ1つの部品=モジュール
と考えると、理解しやすいかと思います。
色んなモジュールがありますが、マクロを作る入門者としては、とりあえず「標準モジュール」を覚えておけば構いません。一般的には、この「標準モジュール」というものを作ったり編集していきます。
(4)命令の中身は「Sub」~「End Sub」に書いてある
では、「マクロの具体的な命令の内容はどこに書いてあるか?」ということですが、
このような場所に書いてあります。
全然意味がわからない・・・
今は意味がわからなくても大丈夫です。安心して下さい。
これは、前回の「マクロの記録」によって作られたVBAの内容ですので、最初からたくさんの命令が書かれています。
ですが、いま把握しておくのは、最初と最後の1行だけです。
「Sub プロシージャ名()」から始まって、「End Sub」で終わる。
その間に書いてある内容が、具体的なマクロの命令内容ということですね。
プロシージャって何?
「プロシージャ」というのは、(procedure;手順)つまり一連の処理のことですね。
[例えば…]
- Sub 書式を変える()
- Sub 一覧をクリアする()
- Sub 並べ替える()
といったように、一連の処理の1つ1つが「プロシージャ」ということです。
(5)具体的な命令を見てみよう!
それでは、具体的な1つの命令に着目してみましょう。
たとえば、この1文です。
「Selection.Font.Bold = True」とはどういう意味でしょうか。
ここは、英語っぽく理解していくと理解できます。
- 「Selection」…選択しているもの
- 「Font」…フォント
- 「Bold」…太字
つまり、左辺は
「選択しているセルの、フォントの、太字を…」という意味になります。
そして、「true」とは「真」を意味する英語ですが、
関数やVBAにおいては
- true = 真(”Yes”のこと)
- false = 偽(”No”のこと)
を意味します。
まとめると、
「選択しているセルの、フォントの、太字を = 真(Yes)にする」
という意味になりますね。
何となくでも意味が分かったでしょうか。
そう、VBAは、英語にとても似ているのです。
で、「プロパティ」っていう言葉があったけど、それは何?
さて、上記で「プロパティ」という言葉がありましたが、これもVBAを理解するための用語ですね。
マクロにおいては、1つのものをオブジェクトと呼びます。そして、オブジェクトが持っている数値のことを1つ1つ「プロパティ」と呼びます。
[例えば]
Kuma(クマ)というオブジェクト
- Size…大きさを意味するプロパティ
- Weight…重さを意味するプロパティ
- Speed…速さを意味するプロパティ
上記のように、1つのオブジェクトには色んなプロパティがあるということですね。
でも、さっきのVBAにはオブジェクト名なんて書かれてなかったじゃない??
そう、先ほどの文例では、実はオブジェクト名を省略して書いてあったのです。
先ほどの「Selection.Font.Bold」のようによく使われるプロパティの場合、その持ち主であるオブジェクト(Application)は省略しても可とされています。
ですので、通常このようなプロパティを使う場合は、オブジェクト名を省略して記述することが多いですね。
(6)マクロの一部を書き換えてみよう!
プロパティに値を挿入するときは、
プロパティ名 = 数値
のように記述します。
VBA以外のプログラミング言語にもよくある表現方法なのですが、
左のもの = 右のもの と記述した場合、
左のもの ← 右のもの この向きに値を挿入する
という意味を指します。
[やってみよう]
では、VBAの一文を書き換えてみましょう。
「true」という記述を「false」に書き換えます。
①「Selection.Font.Bold = True 」の右辺の「True」を削除して、「False」に書き換えます。
②左上の緑色のボタンか、ショートカットキー[Alt]+[F11]で、画面をExcelに切り替えます。
③いずれかのセルをクリックして選択し、「一発で書式を変更」ボタンでマクロを実行します。
④マクロの実行後、フォントを見てみましょう。太字にならなくなりました!
これは、あなたがVBAを書き換えたことによりマクロの命令が変更されたからです。
- Selection.Font.Bold = True フォントを太字に変更する
- Selection.Font.Bold = False フォントを太字でない状態にする
今回はここまで!
いかがだったでしょうか?
今回は以上です。
次回からは、さらにVBAの基本について詳しく解説していきます!
この連載のような内容を動画のコースでわかりやすく解説しています。
(ベネッセUdemyにて動画コースが●%オフ)
【好評につき、続編が出ました】
[脱・入門編]請求書を1クリックで作るマクロを作ろう
[新着]こちらは5月いっぱいまで無料!
お子さんのプログラミング学習に興味のある方は
ゲーム好きな子供を熱くさせる!
親子で学べる、プログラミング教育 超入門コース
<<5月いっぱい無料です>>
========
連載:
エクセルで始める!VBAプログラミング入門
(Excelの作業を自動化できる、プログラミング超入門講座)
【連載】
- 第0回 エクセルを自動化する、マクロVBAプログラミングとは?
- 第1回 超親切な機能「マクロの記録」でマクロを始めよう!
- 第2回 マクロの中身を解明!初めてのVBAに挑戦(この記事)
- 第3回 基本のVBAを記述してみよう!
- 第4回 続・基本のVBAを記述してみよう!
- 第5回 [変数]入門!プログラミングの必修項目
- 第6回 もっと変数を使おう!String型とVariant型
- 第7回 もっと便利な「VBA関数」を使おう!
こんにちは。
とっても分かりやすくて、マクロの記録までサクサクできました。
しかし、書き換えができません。
Selection.Font.Bold = False になっているのですが、太字になってしまいます。
どんなことが考えられるでしょうか?
Excel2010、Windows10を使用しています。
その場合、それ以降の行を探してみて、もう一度
Selection.Font.Bold=True と書いてある行がありませんか?そこもあれば修正が必要です。
ご返信ありがとうございます。
もう1回作り直したら、このサイト通りにできました。
最初に作ったものは、
Selection.Font.Bold = False
Selection.Font.Italic = True
With Selection.Font
.Name = “MS Pゴシック”
.FontStyle = “太字 斜体”
となっていて他も微妙に違っていて、どこかで操作を間違っていたかも知れません。
すいません、重複して投稿しちゃいました。