VBAで制御構文作ったら現実を突きつけられた(´;ω;`)

ExcelVBA

こんにちは。ネコヲです。中小ブラック企業に勤務する40代の事務員です。

40代から本格的にプログラミングの勉強をはじめました!

6月からは、ノンプロ研が主催する初心者向け講座【VBAコース】に参加しています。

40代の中高年がノンプロ研初心者向け講座【VBAコース】に参加してみた!受講レビュー

今回は、第2回目の講義に参加した振り返りレビューです。

盛りだくさんの内容でしたので、ネコヲの双子の兄「ゆっさん」をアシスタントにお送ります。

ゆっさん
ゆっさん

こんちはー。ネコヲの双子の兄、ゆっさんです。

プログラミングに関しては、素人の中の素人だい!

 
猫雄
猫雄

今回の講義も食らいついてくど~!

第二回目講義 制御構文

 

「制御構文」

難解そうなこの専門用語を聞いただけで、尻込みし、一歩後ずさりしてしまう心境になる人は多いのではないでしょうか?

私もご多分に漏れず、講義前はピンと張り詰めた心持ちで身構えておりました。

蛇(制御構文)ににらまれた蛙(ネコヲ)

でも大丈夫!

ノンプロ研の講座は、目の前にそびえ立つ大きな山を、一つ一つ小さく分解して解説してくれました。

「千里の道も一歩から」 意味:大きな目標も最初の一歩から始まる。
猫雄
猫雄

そんな感じで、一つづつ押さえていきたいです!

今回の講義のアジェンダは「条件分岐」と「繰り返し」。

さっそく条件分岐からスタートしました!

条件分岐

条件分岐の説明に入る前の前提知識として、プログラムは、記述されたコードの上から順番に処理がされていきます。そこに条件分岐が加わり、より複雑な処理ができるようになります。

条件分岐の構文を一つ一つ丁寧に解説してくれました!

1⃣ If~Else文

If~Else文の構文はこちら

If 条件式 Then
’処理1
Else
’処理2
End If

日本語訳は「もし条件式に合致しているなら「処理1」を実行し、合致していないなら「処理2」を実行」です。

ゆっさん
ゆっさん

俺にもイメージしやすいように具体的にコード書いてみてよ!

猫雄
猫雄

じゃあ、俺の好きなモー娘。の小田さくらちゃんを使って書いてみるよ!

 
ゆっさん
ゆっさん

いいね~!趣味を絡ませると勉強効率上がるよな!

小田さくら 1999年3月12日生

引用画像:ハロープロジェクト公式ページ

まずは、第一回の講義で習った変数宣言だ!

Dim 変数 As データ型

変数targetは文字列だから「string型」変数ageは整数だから「Long型」

 

猫雄
猫雄

で、こんな感じで書いてみたよ。

実行して、イミディエイトウィンドウで確認

猫雄
猫雄

お!いいね!最近さくらに大人の魅力が出てきたと思ってたんだよな~。

ゆっさん
ゆっさん

じゃあさ、じゃあさ~、俺の推しのメンバー北川莉央ちゃんでやってみてよ。

北川莉央 2004年3月16日生

引用画像:ハロープロジェクト公式ページ

猫雄
猫雄

よし!リオちゃんにあわせてコードを書き換えよう。

実行して、イミディエイトウィンドウで確認

ゆっさん
ゆっさん

あああああ!未成年アイドルという強烈なパワーワードが40代の俺にカウンターパンチをあびせてきやがるぜ!

猫雄
猫雄

イミディエイトウィンドウが現実を突きつけてくるな~。

2⃣ IF~ElseIf文

If~Else文は、一つの条件をもとに二者択一の判定をする構文でした。

IF~ElseIf文は、さらに3つ以上の条件をもとに複雑な判定ができるんです

 

If~ElseIf文の型はこちら

If 条件式A Then
‘処理1
ElseIf 条件式B Then
’処理2
・・・・
Else
‘最後の処理
End If

日本語訳:条件式Aが合致なら処理1を実行

     ↓

     条件式Aが合致してなかったら条件式Bを判定

     ↓

     条件式Bが合致なら処理2を実行

     ↓

     条件式Bが合致してなかったら条件式Cを

     ↓ 

     条件式のどれにも当てはまらなかったら

     ↓ 

     Else以下の最後の処理を行う。

最後の処理は、上から判定した結果、どの条件も満たさなかった場合に行われる最後の砦です。

引用画像:ノンプロ研講義資料より

さらに、一つ一つの条件式に論理演算子を使うと、条件に幅を持たせることができます。

講義で紹介された論理演算子です。


引用画像:ノンプロ研講義資料より

And「かつ」で条件範囲を広げたり、
Or「または」でどちらか一方が条件に合致していればよかったり、
Not「否定」で、否定を条件としてみたり、

より複雑な条件を作成することができるんですね~。

ゆっさん
ゆっさん

よし!ここでも例文を作ってみるか!

猫雄
猫雄

はいは~い!挙手

ゆっさん
ゆっさん

なんだ?

猫雄
猫雄

またまたモーニング娘。を例に取り、2021年時点でのモー娘存続期間におけるヲタ判定表を作りたい!

素材:モーニング娘。(画像引用:公式サイトより)

結成日1997年 2021年時点で24年にわたる活動期間

条件1・ヲタ歴20年以上→:”古参ヲタ”

条件2・ヲタ歴10年以上20年未満→:”中堅ヲタ”

条件3・ヲタ歴5年以上年10年未満→:”フレッシュヲタ”

条件1~3にあてはまらなかったら・・・・

猫雄
猫雄

ってことで、ゆっさんのヲタ判定プログラムを作ってみたぞ。

実行して、イミディエイトウィンドウで確認

ゆっさん
ゆっさん

まあな~。俺はどっちかっていうと「つばきファクトリー」の箱推しだからな。モー娘。に関してはニワカだよ。

3⃣ Select~Case文

お次はSelect~Case文です。

Select~Case文の型はこちら

Select Case テスト式
Case 値1
’処理1
Case 値2
’処理2
————-
Case Else
’Else処理
End Select

日本語に訳すと、「テスト式と一致する値のCase節の処理を実行する」です。

猫雄
猫雄

この構文、ネコヲ的には「式」ってのがなかなか掴めなかったんだよな~。

テスト式って何?ってところなんですけど、Select caseの後に続く「式」とCaseの後に続く「値」の一致を判定していくみたいです。

ちなみにわからなかったら、ノンプロ研のSlackに質問すれば、すぐに回答を得られ、疑問を解消できます。

引用:SlackのTA(ティーチングアシスタント)さんからの回答より

猫雄
猫雄

なるほど、すぐ聞けて回答もらえるのはいいよね!!

理解できたところで、早速こちらの構文を使ってなにかプログラムを組んでみましょう!

猫雄
猫雄

よ~し!じゃあ、またまたモーニング娘。を例に取り、新曲のオリコンランキングの結果を評価したい。

ゆっさん
ゆっさん

お前のモー娘。愛ちょっとうざいわ!

ってことで書いたコードがこちら

実行して、イミディエイトウィンドウで確認

猫雄
猫雄

それにしても趣味を絡めると勉強は捗るな~!

繰り返し

今までは条件分岐を勉強してきました。

制御構文の化身
制御構文の
化身

シャ~!!制御構文はそれだけではありませんよ。もう一つ大きな山場として「繰り返し」があります!

蛇(繰り返し)ににらまれた蛙(ネコヲ)

同じことを何度も繰り返し実行したい場合ってありますよね。

「ループ」とか「反復」と言ったりもします。

猫雄
猫雄

何百個もコピペするのダルいんだよな~。

講義では、繰り返しを実現する構文の紹介がありました!

繰り返しの構文はプログラミングにおいて強い武器になるとのことです!

猫雄
猫雄

うお~!是非ものにしたい!

では、一個づつみていきましょう。

1⃣ For Next文 決まった回数の繰り返し

For~Next文の型はこちら

For カウンタ変数 =初期値 To 最大値
  ’処理
NEXT カウンタ変数

カウンタ変数とは、一般的に整数型で、iとかjとか、一文字のアルファベットを使うのがお作法となっています。

猫雄
猫雄

暗黙のルールがあるってことは、奇抜な変数をつけると他の人が見たとき混乱しそうだな!

ゆっさん
ゆっさん

ユーザビリティは大事だよ!

For Next文は、実際の講義に使われた問題を元に確認しましょう。

問題

1から任意の整数xまでの整数を1+2+・・・と順番に加算した結果を、出力するプロシージャを作成しましょう。

猫雄
猫雄

ふむふむ、この構文にあてはめていけばいいわけね。

For カウンタ変数 =初期値 To 最大値
  ’処理
NEXT カウンタ変数
猫雄
猫雄

まずはカウンタ変数の宣言だな!

Dim i As Long

ゆっさん
ゆっさん

1から加算していくわけだから、初期値は、「1」だな。

猫雄
猫雄

で、最大値は任意の整数xってことか。任意ってことだからどんな数字でもいいんだな!

・・・・・・・・・・・

 

猫雄
猫雄

じゃあモー娘。の現メンバー数14人だから、X=14にしよう!

ゆっさん
ゆっさん

お前、モー娘。に拘り過ぎ!

Dim x As Long: x = 14

 

猫雄
猫雄

あとは、数を代入していく箱が必要だな!

Dim hako As Long : hako = 0

 

猫雄
猫雄

よし!これで変数宣言はできた!For Next 構文を組み立てていくぞ!

For  i = 1 To x
        hako = hako + i
NEXT i
ゆっさん
ゆっさん

おい!

hako = hako + i ってどういう意味だ?

猫雄
猫雄

ふっふっふ、ここが今回の学習のキモでしょう!

第一回の講義で、変数とは、値を入れることができる「箱」のことだと学習しました。


この箱に値を入れることを「代入」といいます。
箱に新たに値が代入されるたびに、値はどんどん上書きされていくんですね!

最初は、変数hakoには0の値が入っています。

1回目のループで
0 = 0 + 1 と実行され、変数hakoの値は0から1に上書きされます。
2回目のループで、
1 = 1 + 2 と実行され、変数hakoの値は1から3に上書きされます。
3回目のループで、
3 = 3 + 3 と実行され、変数hakoの値は3から6に上書きされます。

この椅子取り上書き代入ゲームは変数xの14回目まで繰り返されます。

完成したプログラムはこちら

実行して、イミディエイトウィンドウで確認

2⃣ Do While~Loop文

Do While~Loopの型はこちら

Do While 条件式
’処理

Loop

日本語訳は「条件式がTrueの間、繰り返し処理をする。」です。

こちらも早速サンプルコードを見てみましょう。

猫雄
猫雄

え~と、最初に変数xに1が入っているのか。xが100未満までは、x=x+xという処理を繰り返すってことか。

ゆっさん
ゆっさん

え~と、

1回目は

x(1) = x(1) + x(1)

2回目は

x(2) = x(2) + x(2)

3回目は

x(4) = x(4) + x(4)

うお~、実行してみたほうが早えな!

実行した結果がこちら

ところで、このDo While~Loop構文!注意すべき点があります。

それは、必ず、処理が終了するようにプログラムを組む必要があるということです!

上記のサンプルコードでは、条件式が「100未満」となっているため、100より大きい数字になると処理が終了します。

ところが、処理を終了しないようなプログラムを組んでしまうと、無限ループという状態になります!

猫雄
猫雄

ふ~、無限ループを表したくて、図形描画で画像作ってたら無駄に時間がかかったぜ!

ゆっさん
ゆっさん

バカなことに時間使ってんじゃね~よ!

無限ループのサンプルコードがこちら!

変数xの値が0なので、いくら足しても無限に0です。

実行してみると、プログラムが終了しないため、ESCキーで強制終了して終わらせます!

一般的にはESCキーで強制終了するやり方がトレンドですが、講義では裏技的な終了方法も教えてくれました。

猫雄
猫雄

攻略本にものってねえレア情報だぞ!

3⃣ ネスト

プログラムは、For~Next文やIf文など、構文を組み合わせて組むことが頻繁にあります。

構造の内部に同じ構造が含まれている状態のことをネストというんですね~。


引用画像:ノンプロ研講義資料より

猫雄
猫雄

ネストって言葉は初めて知ったぞ!

ネストになると、どんどん深くなって読み解くことが難しくなるので、きちんとインデントを行うことが大事ということでした。

その他の重要ポイント!読みやすいコードを書く

制御構文からすこしづつプログラミングのコードは複雑になっていくので、講師の方がとても重要なお話をされていました。

それは

「読みやすいコードを書く!」

ということです。

これはとても重要なポイントだと思いました!!!

例えば、こんなコードがあったとします。

記述に問題がなければ、VBAはこれでも実行できるのですが、見る人によってはかなり脳に不可がかかりますよね。

ゆっさん
ゆっさん

なんだこれ?どこで区切るんだ?素人にはわかりづれ~よ!謎解きか?

これをインデント(字下げ)することで

インデントすることで、IF~ElseIF文を使った条件分岐であり、判定結果部分が字下げされていることがわかり、メリハリがでて見やすくなりますね!

猫雄
猫雄

見やすさって大事だな!

講師の方が、自分以外の人、そして未来の自分が見たときにわかりやすいかという視点を持つことが大事、と仰っていたのが印象的でした。

余談ですが、ブロガーも絶対持っておくべき視点だと思いました!

その他の感想!ノンプロ研 アウトプット早すぎ!

主催者および受講生の皆さん、講義を受けつつ気づいた点や目からウロコだった点を即座にツイートしていて、その迅速さたるや、ほんと凄まじいです。

猫雄
猫雄

俺は、もう授業聞くだけで必死だよ!マルチタスク能力がうらやますぃ~!

しかも、講義が終わって、あっという間に講義ツイートのまとめができあがっていたりと、

[ノンプロ研]VBA初心者講座第2回・制御構文
『コミュニティ「ノンプログラマーのためのスキルアップ研究会」VBA初心者講座第2回のツイートまとめです。コンテンツは「制御構文」です。』

瞬即アウトプットに40代のネコヲは脱帽です。

猫雄
猫雄

俺の頭からは、プシュ~って湯気がたっていたよ!

例えるなら、

ネコヲ→機関車トーマス

他の受講生→E5系はやぶさ

でしょうか。

 

でも、比べるべきは昨日の自分です!

人生100年時代。40代であっても遅すぎることはありません(と自分に言い聞かせる)

プログラミング習得の道のりは長いです。すこしづつ前進していきましょう!(と自分に言い聞かせる)

猫雄
猫雄

うお~!復習するぞい!

タイトルとURLをコピーしました