【Excel】記号を制する者はExcelVBAを制する(速読VBA単語Program2-1)
VBAの初学者が最初に覚えなければならないことは「VBAで使う記号は特別な意味を持つので自由に使えない」ということです。
意外なことに、半角の記号に苦しめられる初学者が多いのです。ドットとカンマを間違えただけでエラーになります。また、半角のスペースが入っていないだけでエラーになることもあります。
芸能界では「Kis-My-Ft2」や「藤岡弘、」のように記号を用いて名前を付けることがありますが、VBAでは自由に記号を使うことができません。それは、VBAの記号は特別な命令として使用されるからです。それをしっかりと理解すればなんとなくコードが理解できるようになります。
このProgram2-1は、VBAで使われる記号の意味をなんとなく理解しようという内容です。なお、記号の使い方のイメージをつかむだけなので、本物のVBAのコードではなく、VBAっぽい英文(疑似的なコード)を使って説明しています。VBAの正式なコードではないので、入力してもエラーになるだけで正しく動きませんが、疑似的なコードをたくさん速読することで、正確な文法が分からなくても何となくVBAのコードが読めるようになります。
目次
1.VBA単語は記号を使ってはいけない
2.演算子(演算の記号)
3.スペース(半角の空白)
4.改行
5.「=」イコール・等号
6.「"」ダブルクォーテーション・二重引用符
7.「.」ドット
8.複数形のs
9.かっこ
10.「'」シングルクォーテーション
11.「 _」半角スペース+アンダースコア
12.End
13.インデント
14.入力練習&単語練習
15.お知らせ
注意事項
「速読VBA単語」は、文法を完全に無視して、難易度順に単語練習をするだけでExcelVBAを習得しようという「邪道」な企画です。本講座は、極めて強い副作用があり安全上注意が必要です。この説明書は本講座を正しく受講するための説明文書です。受講する前に必ずお読みください。
(ここからが本編です。最後まで無料で読めます。)
1.VBA単語は記号を使ってはいけない
(1)大文字と小文字
この講座は「速読VBA単語」というタイトルなので、最初にVBAで使う単語について簡単に解説します。
VBAでは、単語と記号を羅列して記述します。記号は決められた場所でしか使えません。
VBAで使用する単語は必ずアルファベットの半角を使い、途中に数字またはアンダースコア(_)を入れることができます。アンダースコアはShiftキー+「ろ」です。全角は絶対にダメです。半角の直接入力モードで入力しなければなりません。
Apple
Pineapple1
Pineapple2
Tokyo_Metro
ドット、ハイフン、カンマのような記号を入れてはいけません。
※間違い(VBA単語として間違い)
T.M.R-e
Morning Musume。’14
※正しい(アンダースコアと数字だけにする)
T_M_R_e
Morning_Musume_14
「Pineapple1」「Pineapple2」のように数字で連番を打ったとしても全く関連性はなく、別の単語として扱われます。また、先頭が大文字である必要はないので、固有名詞であっても全て小文字で構いません。キーボードで単語を入力するときには全て小文字で構いません。
apple
pineapple1
pineapple2
tokyo_metro
「Apple」と「apple」のようにプログラムの中に大文字の単語と小文字の単語が混ざっている場合は、随時、VBEが補正をしてどちらかに統一してくれます。したがって、同じ単語として扱われます。
異なる単語として区別したい場合は、「apple001」「apple002」のように番号を付けるか、「apple_aomori」「apple_nagano」のように別の単語をくっつけます。
※大文字と小文字は自動的に統一され同じ単語として扱われる
apple
aPPLe
※appleとは全く別の単語として扱われる
apple001
apple002
apple_aomori
apple_nagano
(2)予約語
「Count」「Value」のように、VBAで特別な意味を持つ単語を「予約語」といいます。予約語はたくさんあるので、少しずつ覚えていけばよいです。Program3以降で少しずつ練習していきます。
※予約語の例:予約語はこれ以外にもたくさんある
Sum (Excelの関数名)
In
Long
Global
Next
Friend
予約語は小文字で入力しても、自動で先頭が大文字になりますので、キーボードで入力するときにわざわざ先頭を大文字にして入力する必要はありません。
例:next → Next (自動で変換される)
(3)予約語を避ける
VBAのプログラムでは、appleやorangeのような英単語は自由に使うことができますが、予約語は特別な意味を持ち、使い方に決まりがありますので、自由に使うことができません。「Year」「Date」「Delete」などは予約語ですが、このような簡単な英単語は予約語になっている場合がありますので注意が必要です。
逆に難しすぎる英単語も使ってはいけません。中学の英語の教科書に載っているレベルの英単語は使ってもよいですが、辞書で調べなければわからないような英単語は使ってはいけません(後で読む時に意味が分からない)。わけの分からない単語を使うくらいなら、予約語とバッティングしないようにローマ字の単語にしておくのが無難です。
※ローマ字表記の例
heikin(平均)
tsuki(月)
sakujo(削除)
shohin(商品)
zeikomi(税込み)
(4)2つの単語をくっつけるのはOK
「happy birthday」のようにスペースで区切ってはいけません。
単語と単語の間はくっつけて、1つの単語にしなければなりません。
※間違い
happy birthday
※正しい
happybirthday
HappyBirthday
Happy_birthday
また、予約語を避けるために、わざと2つ以上の単語をくっつけて1つの単語にすることがあります。
例えば、「Long」は予約語ですが、「LongHair」は予約語ではありません。
2つ以上の単語をくっつけた場合、キャメルケースといって、それぞれの単語の先頭を大文字にするのが慣例となっていますが、もちろん全て小文字でも構いません。
※キャメルケース記法
McDonald
KaiinNo
ShohinNameLong
ShohinNameShort
※アンダースコアでつなげてもよい
shohin_name_long
shohin_name_short
※全て小文字でくっつけても良い
mcdonald
kaiinno
shohinnamelong
shohinnameshort
2.演算子(演算の記号)
Excelの数式で使う四則演算(+、-、*、/)、文字列連結演算子(&)、べき乗(^)は、VBAでも同じように使えます。(2+3)*4のようにかっこも使えます。詳しくは、わえなびファンダメンタルExcel Program5-1~5-2の動画をご覧ください。
[Youtube]
・ファンダメンタルExcel 5-1 計算式を入力する1(四則演算)
・ファンダメンタルExcel 5-2 計算式を入力する2(文字列連結演算)
また、比較演算子(>、<、>=、<=、<>)も同じです。詳しくは、[Youtube] わえなびファンダメンタルExcel Program5-10の動画をご覧ください。
[Youtube]
・ファンダメンタルExcel 5-10 比較演算子の基本
演算子を使って、Oyakodon = egg + chicken + rice のような計算式を書くことがあります。このほかに、VBAでしか使わない演算子もありますが、今は覚える必要はありません。
3.スペース(半角の空白)
(1)演算子の場合
演算子の前後にはスペースを入れますが、スペースは自動で挿入されますからわざわざ入力する必要はありません。例えば、足し算の式を入力した場合、「=」や「+」の前後にスペースを入力しなくても勝手に挿入されます。
※このようにくっつけて入力すればよい
setmenu=burger+drink+potato
※何もしなくても自動でスペースが入る
setmenu = burger + drink + potato
(2)予約語の場合
予約語と予約語の間には半角スペースが必要です。
例えば、「End」「Sub」は予約語なので、この2つを連続して入力するときは必ず半角のスペースを入れます。
End Sub
予約語の前後に別の単語や数値がある場合も、半角スペースを入れます。
例えば、「If」「Then」は予約語なので、その前後に別の単語や数値があれば半角のスペースを入れます。このスペースは自動では入らないので、キーボードで入力しなければなりません。
If happy > birthday Then
If happy + birthday > 1 Then
4.改行
1つの式(命令)は必ず1行で書きます。2つ以上の式がある場合は、原則として改行で区切ります。ただし、コロン(:)を使って1行にする方法もありますが、あまりおすすめしません。
※式が2つなら2行にする
a = b + c
d = e - f
※コロンで複数の命令を1行にする方法もある
a = b + c : d = e - f
5.「=」イコール・等号
A=B
日本語「AをBとする」
VBAでイコールといえばいろいろな意味で使われますが、最もよく使われる用法は「代入」です。代入は等しいという意味ではありません。左と右が同じというイメージではありません。左向きの矢印のイメージで、右の数を左に上書きします。
例えば、「Price=4000」は、価格がずっと4000円であるというイメージではなく、「価格を4000円に変更する(上書きする)」というイメージです。今まで価格が4000円では無かったかもしれませんが、「Price=4000」によって4000円に確定するという意味です。A=Bは、AをBとするという意味です。
※価格を4000円に変更する
Price = 4000
では、代入が連続した場合はどうなるでしょうか。例えば、下の例のように「Price=4000」「Price=5000」「Price=6000」と3行で入力したとします。3つの命令は上から順番に実行されます。価格を4000円にした直後に、5000円、6000円と値上げして、最終的に6000円となります(上書き)。つまり、上の2行は取り消しとなります。したがって、このマクロの最終的な実行結果は「Price=6000」です。
Price = 4000
Price = 5000
Price = 6000
'最初は4000円で、1000円ずつ値上げして、最終的に価格は6000円になる。
'この命令の実行結果は6000円である。
行が離れていても同じです。上から順に実行されて、下の行によって上書きされるので、最終的に下の行が優先となります。下の例では、最終的に価格1は8000円、価格2は7000円となります。
Price1 = 4000
Price2 = 5000
Price1 = 6000
Price2 = 7000
Price1 = 8000
このように、イコールは、今までの値を取り消して上書きするという意味があります。
6.「"」ダブルクォーテーション・二重引用符
Excelでは、文字列にはダブルクォーテーションを付けます。詳しくは、[Youtube] ファンダメンタルExcel Program 5-2 をご覧ください。VBAの場合も、文字列にはダブルクォーテーションをつけ、数値には付けません。
[Youtube]
・ファンダメンタルExcel 5-2 計算式を入力する2(文字列連結演算)
ただし、文字列なのにダブルクォーテーションを付けない例外があります。
特に、イコールの左側にあるものはダブルクォーテーションが付かないことが多いです。つまり、代入されるものにダブルクォーテーションは付かないです(今のところそのように覚えておけばよいです)。
※日本語訳はイメージです。
Price = "kakaku" 'Priceは「カカク」と言う
Price = 4000 '値段を4000円にする
Color = "blue" '色を青色にする
Dinner = "yakiniku" '今夜は焼肉にする
Yakiniku = 980 '焼肉定食は980円となります
ダブルクォーテーションで囲んだ場合は、固定の文字列として解釈されるので大文字や小文字が自動で変換されません。例えば、「Value」は予約語なのでvalueと入力しても必ず先頭が大文字になりますが、ダブルクォーテーションで囲んで"value"と入力すると"Value"にはなりません。
ダブルクォーテーションで囲む場合は全角文字やスペースのほか、どのような文字や記号を用いてもかまいません。
"Happy Birthday!!!"
"お誕生日おめでとう"
"I have a pen. pen pineapple apple pen"
7.「.」ドット
(1)小数
12.345
※小数の場合もドットを使う
小数点はドットで表します。「12.345」で1つの数値です。
(2)属性
A.B
日本語「AのB」「Aの中にあるB」「Aが持っているB」
VBAでドットは小数点のほかに、「属性(属するもの)」を表すことがあります。
人間の場合は、顔や手足のほか、好きな食べ物、性別、学歴、家族、出身地など属するものは無限にあります。自己紹介をするときに「自分の~~」といえるものはすべて「属性」です。動植物や物体の場合も色や価格など、属性は無限にあります。猫の足は「Cat.Leg」、猫の目は「Cat.Eye」、猫の色は「Cat.Color」となります。A.Bは、「AのB」「Aの中にあるB」「Aが持っているB」という意味です。
ドットでつなげるものにダブルクォーテーションは付きません(今のところそのように覚えておけばよいです)。
※日本語訳はイメージです。
Cat.Leg = 4 ※猫の足は4本だ
Dog.Ear = 2 ※犬の耳は2つだ
Champion.Medal = "gold" ※優勝者のメダルは金色
Demon.Sport = "相撲" ※悪魔の好きなスポーツは相撲
Tamiya.Rank = "大関" ※田宮を大関に昇格させる
(3)ミスターチルドレン
余談ですが、ある漫才コンビのネタで「Mr.Childrenは息子の一茂と娘の三奈が・・・」「それはミスターのチルドレンだよ」というのがあります。しかし、VBAで「Mr.Children」と記述するとドットは属性を表し、「ミスターのチルドレン」と解釈しますので間違いではありません。ダブルクォーテーションで囲むかアンダースコアにすれば1つの単語とみなされます。
Mr.Children ※ミスターのチルドレン(長嶋茂雄の子供たち)
Mr_Children ※1つの単語ミスターチルドレンとして扱われる。
"Mr.Children" ※固定の文字列
(4)動作を表す
A.B
日本語「AをBする」※Bが動作の場合
Aが物で、Bが動詞の場合は「AをBする」という意味になります。自分で変化させることを表します。
※日本語訳はイメージです。
Milk.Heat ※牛乳を加熱する
Room.CleanUp ※部屋を掃除してきれいにする
Desk.Move ※机を動かす(机が勝手に動くのではなく自分で机を移動するという意味です)
(5)3つ以上
A.B.C
日本語「AのBのC」
「A.B.C」のように3つ以上のものを連結することがあります。
※日本語訳はイメージです。
Yamato.Cat.Color = "black" ※やまと君が飼っている猫の色は黒い
Japan.Tokyo.Chiyoda.Nagata.Population ※日本の東京都千代田区永田町の人口
8.複数形のs
(単語)s
日本語「(単語)に該当するもの全部」
複数形のsが付いている場合、該当するもの全部を指すことがあります(例外もあります)。例えば、AKB.MembersはAKBのメンバー全員を指し、TeamA.MembersはAKBのなかのチームAに属するメンバー全員を指します。
※日本語訳はイメージです。
AKB.Members ※AKBのメンバー全員
AKB.TeamA.Members ※AKBのチームAのメンバー全員(チームAに限定される)
Ueno.Animals ※上野動物園にいる動物全部
複数形の後にさらにドットで単語を連結することもあります。この場合、特に指定が無ければ、増える場合は1つだけ増えて(1件追加)、減らす場合は全部をなくすこと(全部削除)を意味します。増えたり減ったりしない場合は全部が対象になります。
※日本語訳はイメージです。
AKB.Members.Add ※AKBのメンバーを「1人だけ」追加する
SDN.Members.Graduate ※SDNのメンバー全員が卒業して誰もいなくなる
AKBgroup.Members.Count ※AKBグループのメンバー全員の人数を求める
sagawa.Uniform.Borders.Color = "blue" ※佐川の制服の線を青色にする
9.かっこ
(1)動作の条件を表すかっこ
A(B)
日本語「Bを条件としてAをする」
合計するSUMや平均するAVERAGEのように、計算や動きに名前を付けることがあります。その名前の後にカッコ書きをすることがあります。これを引数といいます。
※これはイメージです。VBAの正式なコードではありません。
※コーヒーを飲む
Drink("coffee")
※ミルクを飲む
Drink("milk")
※今日、外でコーヒーを飲む
Drink("coffee", "outside", "today")
例えば、「飲む」という行為にDrinkという名前を付けた場合、Drinkだけでは何を飲めばいいのか分からないので、Drink(~~~)として、何を飲むか、飲む場所、日時などの条件や補足説明をカッコ書きで表します。条件が2つ以上ある場合はカンマで区切ります。カッコ書きに文字列を使う場合はそれぞれダブルクォーテーションで囲みます。動作を表す名前が先で、条件を表すカッコ書きが後です。
(2)複数形のs+(数字)
複数(X)
日本語「複数のうちのX番目のもの」
複数(X,Y)
日本語「複数のうちのX番目のなかのY番目のもの」
複数形のsがついている単語の直後にカッコ書きで数字を書いた場合、1つだけを指定したことになります。例えば、studentsが生徒たちを表しているものとすると、students(15)は出席番号15番の生徒を指します。
※日本語訳はイメージです。
students ※たくさんの生徒
students(15) ※出席番号15番の生徒1人だけ
Holes(2) ※ゴルフの2番ホール
次の図は、太陽系の惑星ですが、これらをPlanetsと表現した場合、Planets(3)は地球です。惑星には大きいものや小さいものがありますが、Planets(3)は大きいほうから3番目ではなく、並び順としての3番目です。大きさは関係ありません。
2次元の場合、数学の座標のように(x, y)と書くことがあります。例えば、マンションの8階の5号室は805号室といいますが、VBAではrooms(805)としたり、8番目のフロアの5番目の部屋という意味でrooms(8,5)とすることもあります。
カッコ書きのあとに、さらにドットで単語を連結することができます。
例えば、「Edo.Shoguns(1).Name」は「"徳川家康"」という文字列であり、「Edo.Shoguns(1).Sons(3)」はその3番目の息子のことです。
※日本語訳はイメージです。
Edo.Shoguns ※江戸の将軍15人全員
Edo.Shoguns(1) ※江戸の将軍の中の1番目の人(初代将軍)
Edo.Shoguns(1).Name ※初代将軍の名前
Edo.Shoguns(1).Sons ※初代将軍の息子たち11人全員
Edo.Shoguns(1).Sons(3) ※初代将軍の三男(秀忠)
(3)複数形のs+(名前)
複数("名前")
日本語「複数のなかで"名前"に該当するもの」
順番にかかわらず(1人に特定することができれば)名前で指定することもできます。
students("YamadaTaro")
Edo.Shoguns("Yoshinobu")
10.「'」シングルクォーテーション
プログラムを説明するための文字列を「コメント」といいます。
コメントは先頭に「'」シングルクォーテーションをつけて自由に書くことができます。コメントはプログラムの実行時には無視されます。行の先頭に「'」シングルクォーテーションをつけるとその行全部がコメント行となります。行の途中に「'」シングルクォーテーションをつけると、左側が実行の対象となり、右側がコメントになります。コメントが複数行になる場合はそれぞれの行に「'」シングルクォーテーションをつけます。
comment = "none" 'ノーコメント
'コメントは差し控えさせていただきます。
'訴状が届きましたら適切に対処いたします。
'担当者不在のためお答えいたしかねます。
'記憶にございません。
11.「 _」半角スペース+アンダースコア
VBAでは1つの命令は1行で書きますが、1行が長すぎて、行の途中で改行したい場合は、「 _」半角スペース+アンダースコアの組み合わせで改行することができます。特に、記録マクロ(Program1-1参照)をしたときに、半角スペース+アンダースコアの組み合わせがよく使われます。削除して1行にしても構いません。
※この2つは同じ意味
smap = kimura + nakai + inagaki + kusanagi + katori + mori
smap = kimura + nakai _ ※アンダースコアの前にスペースがある
+ inagaki + kusanagi + katori _
+ mori
12.End
A
'-----Aの範囲内である-----
End A
VBAでは1つの命令は1行で書きますが、始まりと終わりを表す文は、始まりと終わりの2行で1セットです。どちらか一方でもなかったらエラーです。例えば、次のコードを見てみましょう。
Sub Test()
※-----Subの範囲内である-----
End Sub
これはプロシージャの始まりと終わりを表す文です(Program1-2参照)。
「Sub」で始まり、「End Sub」で終わります。この2行で1セットです。「Sub」~「End Sub」でSubの範囲を表します。「Sub」と「End Sub」は行の先頭を揃えます。
Sub以外にも「End」を使って終わりを表すものがあります。これらはすべて2行で1セットです。そして、行の先頭を揃えます。プログラムの中に「End ~」という行があったら、必ず始まりの行があると考えます。
With
※-----Withの範囲内である-----
End With
Function
※-----Functionの範囲内である-----
End Function
If ~ Then
※-----Ifの範囲内である-----
End If
Select Case ~
※-----Select Caseの範囲内である-----
End Select
ちなみに、プログラムの途中に「End」だけが単独で書いてあれば、その時点でプログラムの実行を強制終了するという意味になります。
※マクロの終了
End
13.インデント
A
B
C
XXXXXXXXXXXXX
End C
End B
End A
例えば次のようなコードがあったとしましょう。
Sub Test()
With Sheets(1)
.Cells(1, 2) = "aaaaa"
If .Cells(1, 1) = "" Then
.Cells(1, 2) = "bbbbb"
End If
End With
End Sub
全く意味が分からないと思いますが・・・
プログラムは上から実行しますが、VBAのコードを必ずしも上から順に入力するとは限りません。
上のコードの場合、最初と最後の行をはじめに入力します。「Sub~」の行と「End Sub」は始まりと終わりを表すセットです。始まりを表す行と終わりを表す行がセットになっている場合は、それを先に記述します。外側から順に記述します。
Sub Test()
End Sub
その始まりと終わりを表すセットの中に文を記述するときには字下げをします。これをインデントといいます。インデントは、キーボードでは[Tab]のキーを使います。ちなみに、インデントの解除は[Backspace]です。
Sub Test()
With Sheets(1)
End Sub
このように縦に線があるものと考えてください。
「With ~」は「End With」とセットで記述します。セットで記述する場合はその先頭を揃えます。
Sub Test()
With Sheets(1)
End With
End Sub
このように縦に線があるものと考えます。
さらに、その範囲の中に文を記述するときは、インデントをします。
Sub Test()
With Sheets(1)
.Cells(1, 2) = "aaaaa"
End With
End Sub
「If~」と「End If」も始まりと終わりを表すセットです。
Sub Test()
With Sheets(1)
.Cells(1, 2) = "aaaaa"
If .Cells(1, 1) = "" Then
End If
End With
End Sub
さらにインデントをして中身を記述します。
Sub Test()
With Sheets(1)
.Cells(1, 2) = "aaaaa"
If .Cells(1, 1) = "" Then
.Cells(1, 2) = "bbbbb"
End If
End With
End Sub
このようにセットで記述する文が増えるとインデントも増えます。
14.入力練習&単語練習
以上のことを踏まえて、VBEにマクロを書いてみましょう。VBEを起動します(Alt+F11)。
右クリックをして標準モジュールを挿入します(Program1-1参照)。
ここにVBAのコードを記述します。その前に単語練習をしましょう。予約語は必ず覚えなければなりません。指が覚えるまで何回も練習しましょう。
■単語練習
半角スペースを入れながら「sub」と半角小文字で10回入力してください。
なお、単語練習をするときは先頭にシングルクォーテーションを付けてください(コメント行)。
'sub sub sub sub sub sub sub sub sub sub
覚えましたか?
それでは、半角・すべて小文字で「sub test」と入力します。「sub」と「test」の間は半角のスペースです。
Enterを入力します。「Sub」は予約語なので、「sub」と入力すると自動的に大文字の「Sub」となります。「test」の後ろにかっこが付きます。さらに、End Subが追加されます。このようにsub+単語を入力するとEnd Subが自動的に入ります。
[Tab]キーでインデントをして「range("A1")=100」と入力します。この文の意味は次回のProgram3-1で解説します。
ちなみに「Range」も予約語なので自動的に先頭は大文字になります。つづりを間違えると大文字になりませんので入力が正しいことを確認することができます。
マクロを実行します。セルA1に100が入ります。
VBEの画面に戻ります。シングルクォーテーションで「セルA1が100になる」と記述します。これはコメントなので実行時には無視されます。
改行して「range("A1")=200」と入力します。コピーを利用しても構いません。
Range("A1") = 100
Range("A1") = 200
マクロを実行します。今度は200になります。このように、100を代入したあとで200を代入すると上書きされるので結局200になります。
15.お知らせ
Program2-1は以上となります。
次回は、Program3-1「RangeとCellsは100回打って覚えなさい」です。Program3以降では、ひたすら単語練習をするとともに、本格的にVBAを書いて実行する練習をします。
引き続きよろしくお願い申し上げます。
この記事が気に入ったらサポートをしてみませんか?