MsgBox関数★InputBox関数 |
|||||||||||||||||||||||||||
| わずかな知識で VBA! |
MsgBox関数
|
||||||||||||||||||||||||||
MsgBox関数とInputBox関数Excelを使用していると、様々なダイアログボックスを目にします。 ここでは、その中でも一番簡単にダイアログボックスを表示できる エクセル VBAのMsgBox関数とInputBox関数を説明します。 エクセル VBAのMsgBox関数は、 ユーザーに何かを伝えたり、 メッセージと共に表示する7種類のボタンの組み合わせにより、 ユーザーに処理を選択させることもできます。 一方、エクセル VBAのInputBox関数は、メッセージを表示すると共に、 ユーザーが入力できるテキストボックスを備えています。 |
わずかな知識で VBA! | ||||||||||||||||||||||||||
| MsgBox関数 エクセル VBAのMsgBox関数は、ユーザーに操作手順等何かしらのメッセージを伝えたり、 メッセージと共に表示する7種類のボタンの組み合わせにより、ユーザーに処理を選択させることもできます。 それぞれのボタンには、クリックされた時の戻り値が決められていて、 その戻り値により、行うべき処理を選択できるからです。 メッセージだけを表示する場合と、戻り値を取得する場合でちょとだけその構文が違います。 1.メッセージだけを表示する場合の構文 MsgBox "処理を中断します。" これに、次のアイコンを表示する場合は、下記の様になります。 MsgBox "処理を中断します!", 48 これに、タイトルを変更したい場合は、次の様にタイトルを記入します。 MsgBox "処理を中断します!", 48, "入力エラー" “ ” ダブルコーテーションで囲った部分がメッセージとして表示されますが、 この部分を変数にすることもできます。 keikokubun = “処理を中断します!” MsgBox keikokubun, 48, "入力エラー!" 表の組込定数には、英語と数字が書いてありますが、どちらを使用しても同じです。 MsgBox "処理を中断します!", vbExclamation, "入力エラー" MsgBox "処理を中断します!", 48, "入力エラー" 2. 戻り値を使用して作業を選択する場合の構文 まず、実際に、MsgBox関数でダイアログボックスにボタンを配置して、 選択されたボタンにより処理を実行する例を紹介します。 Sub tesuto() Dim modori As Integer modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認") Select Case modori Case 6 MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Case 7 MsgBox "「いいえ」が押されました。" & vbCrLf _ & "後悔しますよ!", , "残念!" End Select End Sub modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認") 「はい(Y)」をクリックすると 「いいえ(N)」をクリックすると となります。 戻り値は下記の表のようになっており、数字であらわされています。 変数の宣言として、「Integer」型を指定しています。 文字列型の「String」でも動きますが、使用メモリーを節約したい場合は、 この例のように「Integer」型が適当でしょう。 変数の詳しい説明は、次章で行います。 |
|||||||||||||||||||||||||||
| 配置するボタンの種類、及び、表示するアイコンの引数 |
|||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
MsgBox関数の戻り値とユーザーが押したボタンの対応表
|
|||||||||||||||||||||||||||
| modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認?") ここでは、「36」を使用して、「はい」と「いいえ」ボタン、そして、 問い合わせアイコンを表示しています。 36は上の表の「4」とアイコンの組込定数「32」の和です。 これを別の表記で書くと modori = MsgBox("MsgBox関数について知りたいですか?", vbYesNo + vbQuestion, _ "学習意欲の確認?") となり、また modori = MsgBox("MsgBox関数について知りたいですか?", 4 + 32, "学習意欲の確認?") とも書けます。 表にある「引数に組合せる値」は、組込定数の代わりに使用します。 好みの方法を一つ覚えておけば充分です。 MsgBox関数によってダイアログボックスに配置できるボタンの種類と組合せは、上の表のとおりです。 MagBoxに表示するのメッセージの改行 長いメッセージなどの場合には、メッセージを改行して表示する必要にせまられます。 その場合は、Chr関数を使用して改行することができます。 MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Chr(13) は「改行」(キャリッジリターン) Chr(10)は、「ラインフィード」 です。 VBAには、キャリッジリターンを意味する 「vbCr」,ラインフィードを意味する「vbLf」 そして、その両方を意味する「vbCrLf」という組込定数が用意されています。 これを使っても同じことができます。 MsgBox "「はい」が押されました。" & vbCrLf _ & "続けてお読みください!", , "がんばりましょう!" Select caseステートメント メッセージだけを表示するときと違って、戻り値を取得する場合のMsgBox関数の構文は、 必ず、引数をカッコで囲む必要があります。 一般的に、戻り値の判定にSelect Caseステートメントを使用しています。 Select Caeステートメントは、Ifステートメントと並ぶ条件分岐の方法です。 くわしくは、後章「条件分岐のステートメント」をお読みください。 Sub tesuto() Dim modori As Integer modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認") Select Case modori Case 6 MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Case 7 MsgBox "「いいえ」が押されました。" & vbCrLf _ & "後悔しますよ!", , "残念!" End Select End Sub の中で使用している Select Case modori Case 6 MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Case 7 MsgBox "「いいえ」が押されました。" & vbCrLf _ & "後悔しますよ!", , "残念!" End Select という形で記述し、 <modori>で示す戻り値をCaseに続く<値>と比べ、双方が同じならすぐ下の処理を実行します。 これにどの条件にも該当しない処理を加える場合は、「Case Else」を追加して記述します。 Select Case<変数> Case <値> <処理1> Case <値> <処理2> Case Else <処理3> End Select これをIfステートメントで書くこともできます。 If modori = 6 Then MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _ & "続けてお読みください!", , "がんばりましょう!" Elseif modori = 7 Then MsgBox "「いいえ」が押されました。" & vbCrLf _ & "後悔しますよ!", , "残念!" End If Ifステートメントだと、条件式を何度も書かなければなりませんが、 Select Caseステートメントは、比較する値だけを記述すればいいので、ソースがすっきりとします。 この2通りの方法を、条件によって使い分けて使用します。 InputBox関数 エクセル VBAのInputBox関数とMsgBox関数の違いは、 MsgBox関数が、アプリケーションから一方的に何らかのメッセージを示すだけなのに対して、 InputBox関数で表示されるダイアログボックスは、ユーザーが入力できるテキストボックスを備えている点です。 したがって、InputBox関数は、マクロの実行中に、ユーザーから必要なデータを取得する場合に使用します。 InputBox関数に非常によく似たものにInputBoxメソッドがあります。 この2つの一番の違いは、ダイアログを表示している間に、 セルを選択できるかどうかということです。 ダイアログボックスを表示している時にアプリケーションが操作できなくなる現象を、 「アプリケーションモーダル」といいます。 InputBox関数は、アプリケーションモーダルになり、 InputBoxメソッドは、アプリケーションモーダルになりません。 エクセル VBA InputBox関数の使用例 Sub tesuto() Dim tosi As String 100 tosi = InputBox("あなたの年齢を入力してください!", Title:="年齢入力") If tosi = "" Then MsgBox "もう一度、あなたの年齢を入力してください!",16,”再入力!” GoTo 100 Elseif IsNumeric(tosi) = false then MsgBox “入力された年齢がまちがっています。” & chr(13) & chr(10) _ & "もう一度、あなたの年齢を入力してください!" ,16,”再入力!” GoTo 100 End If Range("C5").Value = tosi End Sub もう、このプロシージャの意味はだいたい分かるようになりましたか? InputBox関数は、「キャンセル」が押された時には空の文字列を戻り値として返します。 そこで、戻り値を収容する変数は、「文字列型」に設定しています。 この例は、ウソでもいいから年齢を強制的に入力させるプロシージャです。 InputBox関数で取得した年齢をセル“C5”に入力します。 何も入力されずに「キャンセル」がクリックされた場合は、100に戻り、 再び、InputBox関数で、年齢の入力を促します。 また、入力された値が、文字列で、数字になっていない場合も考えられるので、 IsNumeric関数でデータを数値として評価できるかも調べ、同じ作業を行っています。 テキストボックスにあらかじめ入力方式の見本となるデフォルト値を表示させる場合は次の様にします。 tosi = InputBox("あなたの年齢を入力してください!", Title:="年齢入力", Default:=25) InputBoxメソッド InputBoxメソッドも、InputBox関数と同じで、テキストボックスが配置されたダイアログボックスを表示して、 ユーザーが入力したデータを取得します。 InputBoxメソッドとInputBox関数の違いは、先に、アプリケーションモーダルについて説明しました。 つまり、InputBoxメソッドでは、ダイアログボックスの表示中にマウスでセル範囲等を選択させ、 その範囲を取得することもできます。 範囲を取得する例 Sub tesuto2() Dim sethani As Range On Error Resume Next Set sethani = Application.InputBox("印刷範囲をマウスでドラッグして指定してください!", _ "印刷範囲", Type:=8) If sethani Is Nothing Then Exit Sub With ActiveSheet .PageSetup.PrintArea = sethani.Address .PrintOut End With End Sub 参照セル変数「sethani」をRangeオブジェクトに宣言します。 参照セルは、Setステートメントで、単独セルだけでなく、このように範囲を取得することもできます。 では、InputBoxメソッドの構文の説明です。 Set sethani = Application.InputBox("印刷範囲をマウスでドラッグして指定してください!", _ "印刷範囲", Type:=8) InputBoxメソッドは、必ずApplicationオブジェクトに対して使用します。 「Application」を省略すると、ExcelはInputBox関数と判断してしまいます。 引数 InputBoxメソッドには全部で8種類の引数があり、 MsgBox関数やInputBox関数と大体同じものですが、特徴的なのは、「.Type」です。 .Prompt :メッセージを入力 (省略不可) .Title :タイトルを入力 (省略可) .Default :ダイアログボックスを表示した時に、 入力用テキストボックスに初期値を表示する場合は入力 (省略可) .Type :テキストボックスに入力するデータの型を数値で指定します。 ここで指定したデータ型と異なる型のデータを入力すると「OK」ボタンをクリックしたときにエラーとなります。 このときのエラー表示はExcelが行うので、エラーメッセージを用意しないで済むという利点もあります。 たとえば、上のtesuto2の プロシージャを実行して、 テキストボックスに「1」を入力して「OK」ボタンをクリックすると 次の様なメッセージが表示されて、ダイアログボックスが開いたままとなります。 InputBoxメソッドを使用する場合の注意点 InputBoxメソッドは、「キャンセル」がクリックされると「False」が返されます。 戻り値の変数を文字列型に宣言した場合は、 戻り値をダブルコーテーションで囲って”False”と比較すれば対応できますが、 その他の場合は「Variant型」以外の変数に宣言すると、 「キャンセル」がクリックされた場合にエラーとなり対応できません。 「キャンセル」がクリックされても関係無いようなプロシージャにするか 戻り値の変数を「Variant型」に宣言しましょう。 Tesuto2の場合も、「キャンセル」がクリックされると「False」を返します。 そこで、「On error Resume Next」を記述してエラーに備えています。 On error Resume Nextは、「エラーが発生したら無視して次へ」というような意味です。 そして、選択範囲が空なら印刷処理に進まずにプロシージャを終了します。 If sethani Is Nothing Then Exit Sub がそれです。 Ifステートメントは他にも If sethani Is Nothing Then Goto 100 などのように、「Then」に続けて処理を指定する方法もあります。 詳しくは、「条件分岐のステートメント If Then Else,Select Case」で説明します。 |
|||||||||||||||||||||||||||
わずかな知識でVBA! TOP マクロで何ができる? ユーザーインターフェース マクロの記録 マクロの登録 イベントについて マクロの編集とデバッグ ゲームで覚えるVBAプログラミング オブジェクトの操作 セルの操作 MsgBox関数・InputBox関数 変数の型 ヘルプの活用 イミディエイトウィンドウ Withステートメント Setステートメント 条件分岐のステートメント If Then Else,Select Case 繰り返しのステートメント Do Loop 繰り返しのステートメント For Next ダイアログボックスを作ってみよう1 ダイアログボックスを作ってみよう2 【実践編】 ActiveXコントロール 各コントロールのプロパティ 文字列の操作 Endプロパティ リンク・検索 相互リンク マイプロフィール YouTubeの部屋 |
|||||||||||||||||||||||||||
Copyright (C) わずかな知識でVBA! All Rights Reserved