#6_4 InputBoxの処理
InputBoxメソッド
前回まではMsgBox関数を用いた対話型マクロ(ユーザーの操作により分岐する処理)を学びましたが、MsgBox関数の戻り値は組み込まれた整数値でした。今回学ぶInputBoxでは、ユーザーが入力したデータを(文字列であっても)そのまま取得することができます。
次のマクロは、名簿の印刷部数の入力を促すダイアログボックスを表示するものです。
InputBoxメソッドを用いた対話型マクロ
MsgBox関数の時と同様に、対話型の処理をしたいので、InputBoxメソッドで取得した値を格納するための変数の宣言から始めます。
その後、定義した変数Copyに値をユーザーが入力した代入します。
InputBoxはメソッドなので、当然メソッドを作用させる対象となるオブジェクトがあるはずです。その正体はApplicationオブジェクトです。したがって、上記のような構文になります。
InputBoxメソッドには8つの引数があるのですが、その中でよく使われる4つの引数だけ紹介します。(正直この4つで十分です。)
Prompt: 省略不可。ボックスに表示されるメッセージを指定。MsgBoxと同じ。
Title: 省略可能。タイトルバーの表記を指定します。MsgBoxと同じ。
Default: 入力用テキストボックスに初期値を表示するときに使用。
Type: 入力用テキストボックスに入る値のデータ型を指定。異なるデータ型の値が入力されたときにはエラーが発生。省略すると文字列型になる。
「Copy=Application.InputBox("何枚印刷しますか?","印刷部数の確認")」というように、入力されたデータが左辺の変数に代入され、その後の処理で変数を活用する点もMsgBoxと全く同じです。
下にType変数の一覧を示しておきます。
その後、非常によく使用する「文字列(Type:=2)」「Rangeオブジェクト(Type:=8)」の場合を解説します。
データ型の意味 | 対応するType引数 |
---|---|
数式 | 0 |
数値 | 1 |
文字列 | 2 |
論理値(True, False) | 4 |
Rangeオブジェクト | 8 |
エラー値 | 16 |
数値配列 | 64 |
文字列の入力
InputBoxメソッドの引数Typeに「2」を指定するか、省略すると文字列を格納できる様になります。文字列の入力の代表的な事例は「検索機能」の実装です。次のマクロには、「学籍番号を入力すると、その番号でオートフィルタを実行する」というものです。
AutoFilterメソッドの引数については練習も兼ねてオブジェクトブラウザで検索して調べてみてください。
また、ユーザーがInputBoxに何も入力しなかった場合、変数myNumにはFalseが代入されますが、その際myNumをString型で定義してしまうとエラーになります。したがってここではmyNumをVariant型で定義していますが、どうしてもString型で定義したい時には条件判定を「If myNum <> "False"」という様に、Falseを文字列として扱う様に変える必要があります。注意してください。
セル範囲の入力-
InputBoxメソッドの引数Typeに「8」を指定するとセル範囲(Rangeオブジェクト)を格納できる様になります。
「選択された範囲のセルのフォントを変える」というマクロを下に記述します。