PRIMG0001
 毎週金曜日、プログラミングのちょっとした講座を記しています。
 ここでは、小学校から「プログラミング」が必須項目になってしまったため、お父さん・お母さん・おじいちゃん・おねえちゃんが子供に「プログラミング」教えることができるように、ここでこっそりと勉強してしまおうという企画です。
 今週は入力やOKボタンなどの命令の使い方を説明します。
最初はOKなどのボタン表示です。今までのプログラムの講座では「MsgBox」関数でメッセージとOKボタンしか表示しませんでした。しかし、プログラムを作っているうちに、OKボタンだけでなく「キャンセル」ボタンや「無視」といったボタンを表示させたい場合があります。実はこの「MsgBox」の関数で表示あさせることが出来ます。

MsgBoxの使い方は次の通りです


MsgBox  ( [メッセージ]  ,[ボタンの種類]+ [ボタンに表示するアイコン] +[ボタンの標準箇所], [タイトルの表示] )

 
MsgBox を今まで使っていておやっ?と思った人もいると思います。今まで「Hallo World!」を表示させるために、


MsgBox moji01

とか


MsgBox ”Hallo World!”

と表記して()カッコを付けなかったのに?なんでここでつけるの?ということですが、実はきちんとした使い方は()をつけなければなりません。なぜかというと、ボタンを押したときに、どのボタンを押したかという「戻り値」という値を、次以降のプログラムの命令に渡さなければなりません。この戻り値を保管しておくために()をつけます。
 ただし、先ほどの MsgBox ”Hallo World!” のように単なる表示だけでどのボタンを押したとかという戻り値が必要でない場合はこの()カッコを省略できるという決まりになっています。つまり、きちんとした使い方は()カッコが必要なのです。


 次にボタンの種類は次の定数を指定します。

名前 ボタン
vbOKOnly 0 [OK]
vbOKCancel 1 [OK]、[キャンセル]
vbAbortRetryIgnore 2 [中止]、[再試行]、[無視]
vbYesNoCancel 3 [はい]、[いいえ]、[キャンセル]
vbYesNo 4 [はい]、[いいえ]
vbRetryCancel 5 [再試行]、[キャンセル]


 ボタンのアイコンは次の通りです。
名前 アイコン
vbCritical 16 警告メッセージ
vbQuestion 32 質問メッセージ
vbExclamation 48 注意メッセージ
vbInformation 64 情報メッセージ


 ボタンの標準箇所は次の通りです。
名前 説明
vbDefaultButton1 0 第 1 ボタンを標準ボタンにします。
vbDefaultButton2 256 第 2 ボタンを標準ボタンにします。
vbDefaultButton3 512 第 3 ボタンを標準ボタンにします。
vbDefaultButton4 768 第 4 ボタンを標準ボタンにします。


戻り値は次の通りです。
定数 説明
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]

 上記を踏まえて、「毎日幸せ?」と質問し、「はい」を押したら「Happy!」、「いいえ」を押したら「Oh No!」「キャンセル」を押したら「ふん!」と表示させるプログラムを作ってみましょう。


Sub 表示1()
Dim rtn As Integer
rtn = MsgBox("毎日幸せ?", vbYesNoCancel + vbQuestion + vbDefaultButton1, "質問")
Select Case rtn 
  Case vbYes
    MsgBox "Happy!"
  Case vbNo
    MsgBox "Oh No!"
  Case vbCancel
              MsgBox "ふん!"
End Select

End Sub


 上記のプログラムは「MsgBox」の戻り値を「rtn」という変数に格納して「Select」の分岐で各ボタンの表示をさせています。「rtn」という変数は戻り値が文字で戻されていうように見えますが実際には整数で戻り値が戻っています。そのため、変数は整数で宣言します。Select内の「Case vbYes」を「Case 6」と表記しても動作します。

Select Case rtn 
  Case 6
    MsgBox "Happy!"
  Case 7
    MsgBox "Oh No!"
  Case 2
              MsgBox "ふん!"
End Select

上記に変更しても動作します。

 前回のプログラム講座で「MsgBox()」の命令を「Call MsgBox()」で表記していましたが、通常の「MsgBox()」と「Call MsgBox()」は何が違うかということですが、「Call MsgBox()」の場合、表示だけで戻り値を取得しません。これはCallステートメントという外部のプログラムの部品を呼び出していています。このCallステートメントは後日詳しく説明します。


 次に文字入力を行うボックスを表示させる命令です。ユーザーから文字列や数値を受け取るとる場合、「InputBox」という命令を使用します。
「InputBox」の使用は次の通りです。


InputBox([表示させる文章],[タイトル文],[入力ボックスに初期で表示させる文字列],[ボックスを表示させる縦座標],[ボックスを表示させる横座標],[ヘルプファイル],[ヘルプファイル内のページを示すコンテキストID])



この命令の [ヘルプファイル],[ヘルプファイル内のページを示すコンテキストID]の部分はよほどでない限りヘルプファイルを作成しないので無視して良いでしょう。また、[ボックスを表示させる縦座標],[ボックスを表示させる横座標]は「XPos:=1000, YPos:=2000」といった表記で指定します。この座標はエクセル内の座標ではなく、画面全体での座標となります。

 この「InputBox」の戻り値は入力した分が戻り値となります。そのため、戻り値を格納する変数は文字列で指定します。、また、「キャンセル」ボタンを押した場合は戻り値は空欄("")が返されます。

キャンセルボタンが押されたか判定する場合は次の方法などがあります。

Sub Sample()
    Dim inp As String
    inp = InputBox("住所を入力してください。")
    If inp = "" Then Exit Sub
    msgbox inp
End Sub


 ボックス内の表示文章を2行にしたい場合は、1行目と2行目の間に「 & vbCrLf &」というコードを入れます。これにより2行に改行することができます。入力時に

確認を行います。
住所を入力してください。

と表示させる場合、

 
  inp = InputBox(”確認を行います”& vbCrLf &"住所を入力してください。")

となります。


というわけで、本日はここまでです。