エクセルVBAで使えるデータ入力ダイアログ、InputBoxは2種類あります。
それぞれの特徴を生かした使い分けをすることで、使えるツールの引き出しを増やすことも出来ます。
エクセルVBAのプログラムで、利用者からの入力データを取り込んでコードを実行していくことがあります。
その簡潔な方法としてインプットボックスがあります。今回はこのインプットボックス(InputBox)の使い方についてです。
こんにちは、じゅんぱ店長(@junpa33)です。
コンテンツ
2つのインプットボックス。
関数とメソッド、特徴を生かした使い分け
エクセル VBAで作るソフトで、利用者にデータ入力をしてもらうためのツールとしてInputBoxを利用します。
ユーザーフォームで入力欄を作成するよりも遥かに簡単に利用することが出来ます。
InputBoxには、2つのタイプがあります。
になります。
「どっちがどうなの?」
ということですが最大の違いの一つとしては、
InputBox関数が表示されているときは「アプリケーションモーダル」つまりシートのセル選択ができないということです。
InputBoxメソッドは表示中でも自由にセルを選択することが出来ます。
ということです。
それ以外にも、違いはありますが、それぞれの個別説明で解説していきます。
解説例題の設定
この様なデータを想定します。
この表の番号4のデータの「果物」と「値段」をInputBoxから入力する。
InputBoxでデータを番号で呼び出して「果物」名をメッセージボックスで表示する。
というVBAコードを考えます。
InputBox関数の特徴と使い方
InputBox関数の構文としては、
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile] [, context])
です。
引数は、常用のものとしては、「prompt」「[, title]」「[, default]」だと思います。
prompt | 省略することはできません。「表示されるメッセージ」です。長文で改行する場合は折り返したい部分に「 & vbCrLf &」を挿入します。 |
title | タイトルを指定します。省略可能です。 |
default | ダイアログ表示時に、初期値を表示したいときに指定します。省略すると何も表示されません。 |
xpos | 省略可能です。(x方向)水平方向にモニター画面左端からダイアログまでの位置を指定します。 |
ypos | 省略可能です。(Y方向)垂直方向にモニター画面上端からダイアログまでの位置を指定します。 |
helpfile | 省略可能です。ヘルプファイルを指定します。 |
context | 省略可能です。ヘルプトピックで指定したコンテキスト番号を指定します。 |
注意ポイント
InputBox関数の場合は、入力できるデータのタイプが「文字列」と「数値」になります。
InputBox関数の使用例です。
一見すると普通に問題なく動作するようにも思えますが・・・
Sub インプットボックス1() Dim MyDa As Variant, MyDb As Long, MyDc As Long Dim MyMsga As String, MyTitlea As String Dim MyMsgb As String, MyTitleb As String Dim MyMsgc As String, MyTitlec As String Dim MyR As Long '文字列を入力 MyMsga = "果物名を入力してください。" MyTitlea = "果物名入力" MyDa = InputBox(MyMsga, Title:=MyTitlea) Range("B5") = MyDa '数値を入力 MyMsgb = "値段を入力してください。" MyTitleb = "価格入力" MyDb = InputBox(MyMsgb, Title:=MyTitleb) Range("C5") = MyDb '数値を入力 MyMsgc = "番号を入力してください。" MyTitlec = "番号入力" MyDc = InputBox(MyMsgc, Title:=MyTitlec) MyR = WorksheetFunction.Match(MyDc, Range("A:A"), 0) MsgBox Range("B" & MyR).Value End Sub
実行結果
文字列の入力すると
数値1を入力すると(全角数字ですが入力されました。)
数値2を入力します。それと結果です。
う~ん 至って正常です。
では、何がダメダメなのかについてです。
常用する上では結構重要な部分になります。ここは押さえておきましょう!
それぞれの入力ダイアログが表示されたところで、「キャンセル(入力中止)」してみてください。
その結果を表示します。
文字列の入力を「キャンセル」すると、・・・ 何も起こりません!
数値の入力を「キャンセル」すると、・・・ あらら、エッエラーが出てしまいました。もしかしてバカなの?
必ず覚えておきましょうInputBox関数を使った時に、ダイアログで「キャンセル」ボタンを押したときは、
戻り値として「”” (空)」の文字列が返ります。
ここで、エクセル自身が数値と判断できない値ということで、「型が一致しませんエラー」を表示することになりました。
したがって、
解決のテクニック
「数値を入力」の部分のコードを、修正していきます。
「Val関数」は、文字列を数値型に変換して返す関数です。
「”” (空)」の文字列を「0」に変換してしまいましょう。
全体として正しくは、このように修正しておきましょう。
Val関数の使い方はデータ型不一致の解決策。値を文字列型から数値型へ
Sub インプットボックス2() Dim MyDa As Variant, MyDb As Long, MyDc As Long Dim MyMsga As String, MyTitlea As String Dim MyMsgb As String, MyTitleb As String Dim MyMsgc As String, MyTitlec As String Dim MyR As Long '文字列を入力 MyMsga = "果物名を入力してください。" MyTitlea = "果物名入力" MyDa = InputBox(MyMsga, Title:=MyTitlea) Range("B5") = MyDa '数値を入力 MyMsgb = "値段を入力してください。" MyTitleb = "価格入力" MyDb = Val(InputBox(MyMsgb, Title:=MyTitleb)) Range("C5") = MyDb '数値を入力 MyMsgc = "番号を入力してください。" MyTitlec = "番号入力" MyDc = Val(InputBox(MyMsgc, Title:=MyTitlec)) On Error Resume Next MyR = WorksheetFunction.Match(MyDc, Range("A:A"), 0) MsgBox Range("B" & MyR).Value End Sub
InputBoxメソッドの特徴と使い方
InputBoxメソッドの構文としては、
Application.InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile] [, context] [, type])
です。
InputBox関数の時と同様、常用のものとしては、「prompt」「[, title]」「[, default]」だと思います。
引数の意味も同様です。
ただし、メソッドにしかない引数として [,type]というのがあります。
type | テキストボックスに入力するデータの方を数値で指定します。 省略可能です。省略の場合は選択したデータ型が「文字列」とみなされます。 |
型 意味 | 値 |
数式 | 0 |
数値 | 1 |
文字列(テキスト) | 2 |
理論値(TrueまたはFalse) | 4 |
セル参照(Rangeオブジェクト) | 8 |
エラー値 #N/Aなど | 16 |
数値配列 | 64 |
関数で使った例示をメソッドでも使ってみます。
ダイアログのデザインも関数とは異なっています。
Sub インプットボックス3() Dim MyDa As Variant, MyDb As Long, MyDc As Long Dim MyMsga As String, MyTitlea As String Dim MyMsgb As String, MyTitleb As String Dim MyMsgc As String, MyTitlec As String Dim MyR As Long '文字列を入力 MyMsga = "果物名を入力してください。" MyTitlea = "果物名入力" MyDa = Application.InputBox(MyMsga, Title:=MyTitlea, Type:=2) Range("B5") = MyDa '数値を入力 MyMsgb = "値段を入力してください。" MyTitleb = "価格入力" MyDb = Application.InputBox(MyMsgb, Title:=MyTitleb, Type:=1) Range("C5") = MyDb '数値を入力 MyMsgc = "番号を入力してください。" MyTitlec = "番号入力" MyDc = Application.InputBox(MyMsgc, Title:=MyTitlec, Type:=1) On Error Resume Next MyR = WorksheetFunction.Match(MyDc, Range("A:A"), 0) MsgBox Range("B" & MyR).Value End Sub
実行結果
文字列を入力 MyDa = ”バナナ”
数値を入力 MyDb = 250
数値を入力 MyDc = 3
とダイアログに入力して、正常に実行できました。
次に、ダイアログで「キャンセル」ボタンを押して行ったときはどうなるかというと、
文字列の入力部分で「FALSE」、数値の入力部分で「0」が表示されました。
InputBoxメソッドを使った時に、ダイアログで「キャンセル」ボタンを押したときは、戻り値として、文字列指定で「False」、数値指定で「False」を数値化したものとして「0」が返ります。
したがって、
InputBoxメソッドの場合は「False」をどのように処理するのかを考えていきます。
今回は、文字列の入力のところで、リスト表示がFALSEではいけないので、
「””(空欄)」になるようにしておきます。If条件文で処理します。
Sub インプットボックス4() Dim MyDa As Variant, MyDb As Long, MyDc As Long Dim MyMsga As String, MyTitlea As String Dim MyMsgb As String, MyTitleb As String Dim MyMsgc As String, MyTitlec As String Dim MyR As Long '文字列を入力 MyMsga = "果物名を入力してください。" MyTitlea = "果物名入力" MyDa = Application.InputBox(MyMsga, Title:=MyTitlea, Type:=2) If MyDa <> False Then Range("B5") = MyDa Else Range("B5") = "" End If '数値を入力 MyMsgb = "値段を入力してください。" MyTitleb = "価格入力" MyDb = Application.InputBox(MyMsgb, Title:=MyTitleb, Type:=1) Range("C5") = MyDb '数値を入力 MyMsgc = "番号を入力してください。" MyTitlec = "番号入力" MyDc = Application.InputBox(MyMsgc, Title:=MyTitlec, Type:=1) On Error Resume Next MyR = WorksheetFunction.Match(MyDc, Range("A:A"), 0) MsgBox Range("B" & MyR).Value End Sub
2つのInputBox 特徴ごとに使い分け まとめ
InputBoxメソッドはエクセルVBAの中に属しているメソッドで、
InputBox関数はVisual Basicの中の関数ですので、出自が違います。
そういうことからも、ちょっとした違いが存在しているということです。
個人的には、
InputBox関数の方が、アプリケーションモーダルになるので、誤クリックによる変な入力ミスを防げるという面があるかと思います。
入力したいデータ型を限定できるという面では、InputBoxメソッドに利点がありますし、ダイアログのデザインもこちらの方がいいですし。
お好みでどうぞ!
という所でしょうか。
対話型のコード作成で重要な「InputBox」の
基本を学ぶために
エクセルVBAの初級より「InputBox」は参考書に登場します。
初級の参考書では、その項目だけをいきなり読むのではなくて、
最初からちゃんと順に読んでいく方がいいでしょう。基礎ベースはしっかり積み上げておきましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です
エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。
定番参考書の改定新版が、動画付きになりもっと分かり易くなった
電子書籍版「改訂新版 てっとり早く確実にマスターできるExcel VBAの教科書」をamazonで見てみる
(著者)大村あつし
(出版社)技術評論社
(税込価格)2,508円(本体2,280円+税)
30冊を超えるExcelのマクロやVBAの解説書を執筆してきた著者による考え抜かれた本書の内容と構成。
独創的な解説手法で必ずExcel VBAが理解できます!
初級からの参考書ですが、より実践的切り口での解説をしています。
QRコードから操作の流れを動画(無音です)で確認することもできるようになりました。
文章解説と動画との関係性は、主は文章での解説、サポートが動画になります。
このサイトでよく使うVBAのコードのトピックを纏めています。
今回の記事はここまでです。 最後までご覧いただき有難うございました。