2022/07/29

InputBox関数とInputBoxメソッドの戻り値

InputBoxは2種類あります。1つはVBAとしてのInputBox関数、もう1つはExcel固有のInputBoxメソッドです。

InputBox関数と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数値配列
図2


ユーザーが、InputBox上に何を入力したかは、InputBoxの戻り値で分かります。しかし、例えばInputBox関数で「""(空文字)」が戻ってきたからと言って「何も入力せずにOKボタンをクリックした」とは限りません、「キャンセルボタン」をクリックしても、同じ「""(空文字)」が戻ってきてしまいます。

これを判別するには「StrPtr関数に戻り値変数を指定」して、その結果を調べます。
操作InputBox関数InputBoxメソッド
戻り値StrPtr値戻り値StrPtr値
文字を入力しOKボタン入力した文字列0以外入力した文字列0以外
何も入力せずにOKボタン長さゼロの文字列0以外長さゼロの文字列0以外
キャンセルボタン値ゼロの文字列0False0以外
右上×印で閉じる値ゼロの文字列0False0以外
図3


図3で、InputBox関数の戻り値の「長さゼロの文字列」と「値ゼロの文字列」は違うものですが、「If InputBox("入力せよ") = "" Then ・・・」のような判別方法では、空文字を入れてOKしたのとキャンセルしたのとを区別することは出来ません。
StrPtr関数で「文字列のアドレス」を調べることで区別ができます。

一方InputBoxメソッドの方は、戻り値としてFalseが来た時には「キャンセル」又は「×印で閉じた」ことが分かります。

アプリ実例

<InputBox関数>
備品の予約・貸出・記録ができる貸出管理表
先入先出の入出庫管理システム
DVD等の内容・保管場所等管理システム

<InputBoxメソッド>
サンプリング周期が異なるデータの補間法
複数系列のデータを連続的にグラフ化
グラフのX軸をスクロールバーで移動
ExcelシートDBとSQLを使った倉庫管理システム
出現回数ごとにデータを色分け
シート内検索結果を色付け表示