「Excel」VBAのInputBox!使い方の基本!

こんばんは、こんにちは、おはようございます。( ノ゚Д゚)おやすみなさい! とっちーです。

本日は、VBAでInputBoxの仕組みについてお話してみます。

使い方次第では便利ですが、制約も色々ありますので参考にしてみてください。

 

InputBoxって何?

 

プロシージャ内で使用者に対して値の入力を促すダイアログを表示することと使用者からの入力を承る仕組みを備えています。

注意する点

ダイアログボックスを閉じたり(右上赤塗り白抜け×印)ダイアログの「キャンセル」や空白で「OK」ボタンを押すと、InputBox関数は値0バイト文字列をApplication.InputBoxはFalseが戻り値になることです。場合によってはコードで判断させる仕組みづくりが必要になります。

また、InputBox関数の戻り値は文字列のみになります。Application.InputBoxは、戻り値の種類を設定可能、さらにExcelの操作が可能です。InputBox関数は、ダイアログ以外は操作できなくなります。

 

構文は2種類存在します。

タイプⅠ:InputBox関数

InputBox(Prompt[,Title][,Default][,Xpos][,Ypos][,HelpFile][,Context])

 

  引数             説明
Prompt 「省略不可」_メッセージを表示する(※参考1 :この色で~の部分)部分
Title 「省略可」_ボックス名を表示する(※参考1:色はどれ?の部分)部分 省略した場合は、※参考2Microsoft Excelと表示されます。
Default 「省略可」_規定値を表示させる(※参考1  :入力ボックス内のY
Xpos 「省略可」_表示位置の設定のうち画面左隅からの位置を(twip値)で指定する場合
Ypos 「省略可」_表示位置の設定のうち画面上端からの位置を(twip値)で指定する場合
HelpFile 「省略可」_ヘルプ表示の際の起動させたいヘルプファイル名を指定する場合
Context 「省略可」_ヘルプトピックのコンテキスト番号を指定する場合

 

※参考1

参考1のコード

InputBox(“この色でいいですか(Y)しばらくしない(END))”, “色はどれ?”, “Y”)

戻り値のデータ型 String(文字列型)

 

※参考2

タイプⅡ:Applicationオブジェクト.InputBoxメソッド 

変数名 = Application.InputBox(Prompt[,Title][,Default][,Left][,Top][,HelpFile][,HelpContextId][,Type=値])

例:オブジェクト型の場合

Set 変数名 = Application.InputBox(Prompt[,Title][,Default][,Left][,Top][,HelpFile][,HelpContextId][,Type:=8])

 

   引数             説明
Prompt 「省略不可」_メッセージを表示する(※参考3 :この色で~の部分)部分
Title

「省略可」_ボックス名を表示する(※参考3 :色はどれ?の部分)部分

省略時は「入力」と表示

Default 「省略可」_規定値を表示させる(※参考3  :入力ボックス内のY)省略した場合は、※4:入力と表示します。
Left  省略可」

_表示位置の設定を画面左隅からの位置を基準として1ポイント単位で指定

省略時、画面中央に表示

※1ポイント≒1/72インチ

Top

「省略可」

_表示位置の設定を画面上端からの位置を基準として1ポイント単位で指定

省略時 上から上下間1/3位置に表示

※1ポイント≒1/72インチ

HelpFile

「省略可」表示されているダイアログボックスのヘルプファイルを指定する部分。

HelpFileの引数とHelpContextIDが共存指定されれば、ダイアログボックスに「ヘルプ」が表示されて選択可能になります。

HelpContextID 「省略可」_HelpFileの引数で指定したヘルプファイル内の内容とIDの設定が可能
Type

「省略可」_入力される値の設定をする部分。:省略時は2のString型の文字列となります。

設定を行う場合のみ記述を行う。

 

   値       データ型
    0 数式(String)
    1 数値(Double)
    2 文字列(String):
    4 論理値(Boolean) True OR False
    8 セル参照(Range)
   16 エラー値
   64 数値配列

 

 

※参考3

参考3のコード

Dim 変数 As Range

Set 変数 = Application.InputBox(“この色でいいですか(Y)しばらくしない(END))”, “色はどれ?”, “Y”)

戻り値のデータ型 Type未設定の場合String(文字列型)

 

※参考4

 

 Application.InputBox Type:=値の見本

,Type:=0

コードになります。

 

コード実行

タイトルとメッセージが表示されています。

 

入力箇所に数式を入力するときは、必ず”=”を最初にいれましょう。

計算結果がセルA1に反映されます。

 

”=”を入力せずに計算式だけだと以下のようになります。

入力した文字がセルA1に反映されます。

 

また、空白のまま「OK」ボタンを押すと以下の用にメッセージダイアログが表示されます。

 

「空白」のままキャンセルボタンの場合はセルA1に「FALSE」の文字が反映されます。

 

 

,Type:=1

 

コードになります。

 

コード実行

タイトルとメッセージが表示されています。

 

 

入力箇所に数値を入力して「OK」を押してみましょう。

指定したセルA1に入力した数値が反映されます。

 

計算は出来るのでしょうか?誤認識され「数値がただしくありません。」が表示されます。

 

 

実は、記入方法なのですが最初に”=”や演算子をつけて入力を行うと計算が出来ちゃいます

 

文字を入力すると「数値がただしくありません。」が表示されます。

 

 

また、空白のまま「OK」ボタンを押すと以下の用にメッセージダイアログが表示されます。

 

「空白」のままキャンセルボタンの場合はセルA1に「FALSE」の文字が反映されます。

 

 

,Type:=2

 

コードになります

 

コード実行

タイトルとメッセージが表示されています。

 

入力箇所に「文字」を入力して「OK」を押してみましょう。

 

入力箇所に「数値」を入力して「OK」を押してみましょう。

 

計算式はどうでしょう。

 

最初に”=”をつけた場合は、計算をしてセルA1に計算結果が反映されました。

では、そのほかの演算子はどうなるでしょう。

 

文字と認識され計算は、行われませんでした

また、空白のまま「OK」ボタンを押すとダイアログは終了しセルA1も空白ですが、文字列0の値が反映されます。

 

「空白」のまま「キャンセル」ボタンの場合はセルA1に「FALSE」の文字が反映されます。

 

[quads id=2]

,Type:=4

 

コードになります。

 

コード実行

タイトルとメッセージが表示されています。

 

TRUEと判断される入力値は、0以外の数値と”=”、”+”、”-”の3つの演算子で始まる数式且つ答えが0以外の数値の場合。

セルA1に「TRUE」が反映されました。

 

0の場合はFALSEと判断されます。

セルA1に「FALSE」が反映されました。

 

文字を入力すると「論理値が正しくありません。」のダイアログが表示されます

 

また、空白のまま「OK」ボタンを押すと以下の用にメッセージダイアログが表示されます。

 

「空白」のまま「キャンセル」ボタンを押した場合はFALSEと判断されます。

セルA1に「FALSE」が反映されました。

 

 

,Type:=8

 

コードになります。

 

コード実行

タイトルとメッセージが表示されています。

 

入力箇所に「セル番地」OR「セル範囲」を入力するか、マウスでセルを選択しまし「OK」ボタンを押しましょう。

 

Msgboxが表示されます

 

 

Msgboxが表示されます

 

また、空白のまま「OK」ボタンを押すと以下の用にメッセージダイアログが表示されます。

 

「空白」のままキャンセルボタンの場合は「実行時エラー’424’:オブジェクトが必要です。」のダイアログが表示されます。

 

 

キャンセルボタンを押してダイアログを発生させないようにする方法

 

On Error Resume Nextでエラーを素通りさせる。

コードになります。

 

実行結果

 

Dim a As Range ‘参照型

On Error Resume Next                  <--エラー回避をさせる

Set a = (Application.InputBox(“セルの選択”, “Type:=8”, “”, Type:=8)) <--エラーが出ても素通りになる。

If a Is Nothing Then Exit Sub  <--次の処理をする。この場合はプロシージャ終了になる。

On Error GoTo 0   <-- エラー回避を停止させておく(忘れると、これ以降のプログラムに支障を起こします。)

MsgBox a.Address

 

On Error GoTo 0で、エラー回避の処理を必ず終了させて起きましょう。

まとめ

 

今日は、InputBoxの仕組みについてお話してみました。

使用方法に型枠が決まっていると使い方も制約があるのですが、任せられる範囲のことならInputBoxを活用してもOKかな、まぁ使い方次第ですが。

VBAは難しく考えず、短く綺麗に、コードウインドウにありがとうねって声をかけながら作ってみると、案外うまく出来るかも。

 

 

スポンサーリンク