エクセルマクロ・VBA達人養成塾 小川です。
キューバ旅行記、その68です。
ビニャーレスの谷からハバナへ。そして、さらにバラデロビーチへ。
ビニャーレスから、バスでハバナにやってきました。
バラデロへのバスが出るまで、ちょっと休憩です。
ハバナ市街地のバスターミナルはこんなところ。
18時のバスまで1時間ほど時間がありました。さて、何をしたものか、と思案。
はす向かいに、ハバナ動物園がありました。
入場は16:30までということで、ざんねんながら入れませんでした。
ということで、バスターミナルのレストランまで戻ってきました。
こちらは、入口の写真。窓が破れています。黒ビニールを張ってしのいでいます。
こういうところ、やっぱ、お金のない国なんだなぁ~、と思いますね。
Cristalのビールの絵。中南米ではおなじみの銘柄。
こちらは、ダンススクールのポスター。
今日は、抽象的なお話です。
If 文 の中身のテストをするとき等に使えるお話。
例えば、こんな表で、C列に記載の得点を元に、D列に、「合格」か「不合格」という文字列を記入するとします。
|A列 |B列 |C列 |D列 |E列 |
----------------------------------------------------
1 行目 |ID |氏名 |得点 |評価 |ひとこと|
----------------------------------------------------
2 行目 |1 |松本 めぐみ |20 | | |
----------------------------------------------------
3 行目 |2 |金沢 京子 |51 | | |
----------------------------------------------------
4 行目 |3 |東京 尚広 |56 | | |
----------------------------------------------------
5 行目 |4 |金沢 大輔 |95 | | |
----------------------------------------------------
6 行目 |5 |広島 留美 |65 | | |
----------------------------------------------------
7 行目 |6 |三重 尚広 |79 | | |
----------------------------------------------------
8 行目 |7 |神戸 真菜 |79 | | |
----------------------------------------------------
9 行目 |8 |米子 理絵 |17 | | |
----------------------------------------------------
10行目 |9 |京都 若菜 |72 | | |
----------------------------------------------------
11行目 |10 |権田原 竜之介|65 | | |
----------------------------------------------------
12行目 | | | | | |
----------------------------------------------------
このとき。
For Next構文等を使って、最終形はこんな感じ↓になるのですが。
その前に、考えやすいように、いったん、2行目だけで動くマクロとして、以下のようなものを考えてみます。
さてさて、で。
こういうのの「If 文の中」に書かれたプロシージャのテストをするとき。
実際に、セルC2の値を、100にしたり30にしたり、としてやってもいいですが。
こんな↓書き方もあります。
Sub IfSample03()
If False Then
Range(“D2”).Value = “合格です”
Else
Range(“D2”).Value = “不合格です”
End If
End Sub
試しに、動かしてみてください。
簡単に解説すると。
[1]
If文は、If … Then という構文は、の中の「…」に書かれた式が「True」という値を返すか、「False」という値を返すかだけに注目している。
[2]
IfSample01 では、その「…」の部分が、「Range(“C2”).Value > 50」という評価式。
この式は、セルC2の値の大きさによって、 True か False を返します。
こういうのも、もちろんあり。
[3]
IfSample02 では、その「…」の部分が、「True」という値。
これは、ずばり、If … Then という構文は、「True」を受け取ります。
ということで、常に、Elseより上側に書かれた内容が実行されます。
[3]
IfSample03 では、その「…」の部分が、「False」という値。
これは、ずばり、If … Then という構文は、「False」を受け取ります。
ということで、常に、Elseより下側に書かれた内容が実行されます。
..ということです。
最初は違和感を感じるかもしれませんが。。
○それぞれの「式」が
○どういう「戻り値」を
○誰に渡しているのか
ということを日頃から意識していると、こういう視点も理解できてくるようになります。
こういうののよくある例は…。例えば、開発中のプログラムで、
『あとで条件文を使いたいのだが、条件設定について詳しく考えているアタマの余裕はない!というようなとき。』
以下の例では、最終的には、C列の値が5000を超えている取引先の名前のシートを作成したいのですが、
まずは、If文の中のことだけに集中したい!ということで、とりいそぎ、「If True Then」としています。
|A列 |B列 |C列 |
-----------------------------------------
1 行目 |No. |取引先名称 |取引金額|
-----------------------------------------
2 行目 |1 |愛知製本 |9689 |
-----------------------------------------
3 行目 |2 |愛知販売 |2380 |
-----------------------------------------
4 行目 |3 |愛媛不動産 |874 |
-----------------------------------------
5 行目 |4 |茨城信託 |5273 |
-----------------------------------------
6 行目 |5 |茨城物産 |2323 |
-----------------------------------------
7 行目 |6 |宇都宮不動産|1271 |
-----------------------------------------
8 行目 |7 |宇部工業 |3942 |
-----------------------------------------
9 行目 |8 |横浜航空 |2169 |
-----------------------------------------
10行目 |9 |横浜石油 |9223 |
-----------------------------------------
11行目 |10 |横浜繊維 |9451 |
-----------------------------------------
12行目 |11 |岡山ホテル |1549 |
-----------------------------------------
13行目 |12 |岡山建設 |7876 |
-----------------------------------------
14行目 |13 |岡山研究所 |7137 |
-----------------------------------------
15行目 |14 |岡山百貨店 |94 |
-----------------------------------------
16行目 |15 |沖縄紡績 |580 |
-----------------------------------------
17行目 |16 |岐阜印刷 |6587 |
-----------------------------------------
18行目 |17 |岐阜商会 |2000 |
-----------------------------------------
19行目 |18 |岐阜商船 |7086 |
-----------------------------------------
20行目 |19 |宮崎商船 |5286 |
-----------------------------------------
21行目 |20 |宮崎繊維 |215 |
-----------------------------------------
Dim gyo As Long
For gyo = 2 To 21
If True Then
Worksheets.Add
ActiveSheet.Name = wBs.Range(“B” & gyo).Value
End If
Next
End Sub
明日は、この話の続きとして、よくある失敗の例をひとつご紹介します。