2014-01-23

複雑なIF文

前回、迷う人が多かった箇所を簡略化して示します。
次の二つの例題に関して、xやyの値がどんな時に「いただきます」と表示されるのか、
表示される条件が例1と例2でどのように違うのか考えてみてください。
マクロを書いて実行するときにIfとEnd IFの対応が合ってなくてエラーになって、後からEnd Ifを書き足した時に、間違いの原因となります。

例1

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If
End If

例2:

If x > 0 Then
Msgbox ("こんにちは")
If y > 0 Then
Msgbox ("ありがとう")
Else
Msgbox ("こんばんは")
End If
Else
Msgbox ("さようなら")
End If
If y > 0 Then
Msgbox ("おはよう")
Else
Msgbox ("いただきます")
End If

このままでは、書いた私自身でも理解するのが大変難しいです。
そこで、If~Else~End Ifで囲まれた部分を少し右にずらします。

例1

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
  If y > 0 Then
    Msgbox ("おはよう")
  Else
    Msgbox ("いただきます")
  End If
End If

例2:

If x > 0 Then
  Msgbox ("こんにちは")
  If y > 0 Then
    Msgbox ("ありがとう")
  Else
    Msgbox ("こんばんは")
  End If
Else
  Msgbox ("さようなら")
End If
If y > 0 Then
  Msgbox ("おはよう")
Else
  Msgbox ("いただきます")
End If

右にずらすのは人間が読みやすくするためであり、Excelの動作には関係ありません。
IfとEnd IFの対応が合わなくなるのを防ぐには、Ifを書いた時に中身を書く前にElseやEnd Ifを一緒に書いておくのが良いです。

前回の問題の続き

前回の条件分岐は、まず最初に二つに分かれます。

従って、マクロは
If 午前6時に警報は出ているか Then
  青の部分
Else
  緑の部分
End If
となり、さらに緑の部分が二つに分かれるので、

この部分を詳しく書き足して
If 午前6時に警報は出ているか Then
  青の部分
Else
  If 午前8時40分に警報は出ているか Then
    赤の部分
  Else
    黄の部分
  End If
End If
となります。
このようにIf Then~Else~End Ifの対応に注意しながら、包含関係を考えてください。

課題

前回の課題を完成させて、出来た人は次のフォームの作り方を自習してください。

フォームの作成

メッセージボックスだけでは「はい」「いいえ」だけしか入力できませんので、自分でデザインできるフォームを使ってみましょう。

挿入から「ユーザーフォーム」を選びます。

するとこのような画面が開きますので、ここを自分でデザインします。

このフォームにはUserForm1という名前がついています。これは変更する必要がないのですが、画面に表示されるタイトルを変更しましょう。

画面の左下のプロパティの中のCaption欄がこのウィンドゥのタイトルですので、ここを「休講診断」に変更します。

すると画面のタイトルが「休講診断」に変更されました。

次にボタンを設置します。
休講診断のウィンドゥをクリックすると、「ツールボックス」が表示されます。

この中の「コマンドボタン」をクリックしてください。

するとボタンが表示されます。表示されている文字の変更もCaptionを書きかえればできます。

ここを「気象情報を確認」に書き換えてください。

次に、「気象情報を確認」をクリックしたときに開く2番目のウィンドゥを用意します。
先ほどと同じように挿入から「ユーザーフォーム」を選びます。

これにはUserForm2という名前がついています。 今度はこのウィンドゥのタイトルを「午前6時」にしてください。

次に、単に文字を表示する「ラベル」を入れます。

ツールボックスからラベルを選んでください。

UserForm2にラベルを置いて、Captionを「警報は発表されていますか?」に書き換えます。

さらに、先ほど同様にボタンを二つ置いて「はい」「いいえ」にします。

これらのボタンをクリックして、左側のプロパティのところを見てください。
CommandButton1というのがこのボタンの名前、CommandButtonというのがこのボタンの種類です。

マクロの用意

二つのFormを用意出来たので、「気象情報を確認」をクリックしたらUserForm2が表示されるようにします。

「気象情報を確認」のボタンをダブルクリックすると、マクロを書く部分が表示されます。

ここに
UserForm2.Show
Unload Me
と書きます。
最初のUserForm2.Showは、UserForm2を表示しなさい、という意味で、
次のUnload Meは自分自身(UserForm1)の表示を止めなさい、という意味です。

最後に、UserForm1を表示するマクロを書いて、実行してみましょう。

0 件のコメント: