InputBox関数とInputBoxメソッドの戻り値
InputBoxは2種類あります。1つはVBAとしてのInputBox関数、もう1つはExcel固有のInputBoxメソッドです。図1
外見も違いますが、構文(VBEのオブジェクトブラウザでの説明表示)も以下のように異なります。InputBoxメソッドを指定する場合は「Application.」を先頭に付けます。
<InputBox関数>
InputBox(Prompt, [Title], [Default], [XPos], [YPos], [HelpFile], [Context]) As String
<InputBoxメソッド>
Application.InputBox(Prompt As String, [Title], [Default], [Left], [Top], [HelpFile], [HelpContextID], [Type])
大きく異なるのは、InputBoxメソッドの最後の引数に [Type]が設定できることです。 [Type]には以下の値が設定でき、入力する値の制限が出来ます。特に、ユーザーに「セル参照」を指定させる場合には重宝します。
値 | 型 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字列 |
4 | 論理値(True/False) |
8 | セル参照(Rangeオブジェクト) |
16 | エラー値(#N/Aなど) |
64 | 数値配列 |
ユーザーが、InputBox上に何を入力したかは、InputBoxの戻り値で分かります。しかし、例えばInputBox関数で「""(空文字)」が戻ってきたからと言って「何も入力せずにOKボタンをクリックした」とは限りません、「キャンセルボタン」をクリックしても、同じ「""(空文字)」が戻ってきてしまいます。
これを判別するには「StrPtr関数に戻り値変数を指定」して、その結果を調べます。
操作 | InputBox関数 | InputBoxメソッド | ||
---|---|---|---|---|
戻り値 | StrPtr値 | 戻り値 | StrPtr値 | |
文字を入力しOKボタン | 入力した文字列 | 0以外 | 入力した文字列 | 0以外 |
何も入力せずにOKボタン | 長さゼロの文字列 | 0以外 | 長さゼロの文字列 | 0以外 |
キャンセルボタン | 値ゼロの文字列 | 0 | False | 0以外 |
右上×印で閉じる | 値ゼロの文字列 | 0 | False | 0以外 |
図3で、InputBox関数の戻り値の「長さゼロの文字列」と「値ゼロの文字列」は違うものですが、「If InputBox("入力せよ") = "" Then ・・・」のような判別方法では、空文字を入れてOKしたのとキャンセルしたのとを区別することは出来ません。
StrPtr関数で「文字列のアドレス」を調べることで区別ができます。
一方InputBoxメソッドの方は、戻り値としてFalseが来た時には「キャンセル」又は「×印で閉じた」ことが分かります。
アプリ実例
<InputBox関数>「備品の予約・貸出・記録ができる貸出管理表」
「先入先出の入出庫管理システム」
「DVD等の内容・保管場所等管理システム」
<InputBoxメソッド>
「サンプリング周期が異なるデータの補間法」
「複数系列のデータを連続的にグラフ化」
「グラフのX軸をスクロールバーで移動」
「ExcelシートDBとSQLを使った倉庫管理システム」
「出現回数ごとにデータを色分け」
「シート内検索結果を色付け表示」