3日がかりのその仕事、3分で終わらせる方法教えます!
パソコンスキルの心技体

「If True Then」なんて書き方でテスト

2011年12月27日
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

エクセルマクロ・VBA達人養成塾 小川です。

キューバ旅行記、その68です。

ビニャーレスの谷からハバナへ。そして、さらにバラデロビーチへ。

ビニャーレスから、バスでハバナにやってきました。

バラデロへのバスが出るまで、ちょっと休憩です。

エクセルマクロ達人養成塾塾長ブログ-ハバナ市街地のバスターミナルはこんなところ。

ハバナ市街地のバスターミナルはこんなところ。
18時のバスまで1時間ほど時間がありました。さて、何をしたものか、と思案。

エクセルマクロ達人養成塾塾長ブログ-はす向かいに、ハバナ動物園がありました。

はす向かいに、ハバナ動物園がありました。
入場は16:30までということで、ざんねんながら入れませんでした。

エクセルマクロ達人養成塾塾長ブログ-バスターミナルのレストラン入口。窓が破れている。

ということで、バスターミナルのレストランまで戻ってきました。

こちらは、入口の写真。窓が破れています。黒ビニールを張ってしのいでいます。
こういうところ、やっぱ、お金のない国なんだなぁ~、と思いますね。

エクセルマクロ達人養成塾塾長ブログ-Cristalのビールの絵。中南米ではおなじみ。

Cristalのビールの絵。中南米ではおなじみの銘柄。

エクセルマクロ達人養成塾塾長ブログ-こちらは、ダンススクールのポスター。

こちらは、ダンススクールのポスター。

塾長のキューバ旅行記、最初から読みたい方はこちらから


「If True Then」なんて書き方

今日は、抽象的なお話です。

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構文等を使って、最終形はこんな感じ↓になるのですが。

Sub Saishukei()
    Dim cnt
    For cnt = 2 To 11
        If Range(“C” & cnt).Value > 50 Then
            Range(“D” & cnt).Value = “合格です”
        Else
            Range(“D” & cnt).Value = “不合格です”
        End If
    Next
End Sub

その前に、考えやすいように、いったん、2行目だけで動くマクロとして、以下のようなものを考えてみます。

Sub IfSample01()
    If Range(“C2”).Value > 50 Then
        Range(“D2”).Value = “合格です”
    Else
        Range(“D2”).Value = “不合格です”
    End If
End Sub

さてさて、で。

こういうのの「If 文の中」に書かれたプロシージャのテストをするとき。

実際に、セルC2の値を、100にしたり30にしたり、としてやってもいいですが。

こんな↓書き方もあります。

Sub IfSample02()
    If True Then
        Range(“D2”).Value = “合格です”
    Else
        Range(“D2”).Value = “不合格です”
    End If
End Sub

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 |
-----------------------------------------
Sub hoge()
Dim wBs As Worksheet
Set wBs = ActiveSheet

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

明日は、この話の続きとして、よくある失敗の例をひとつご紹介します。

キーワード

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

最新の記事

人気記事

最新記事

カテゴリ

最新コメント

タグクラウド