ExcelVBA(マクロ)で入力ボックスを表示する方法/Inputboxメソッドの使い方

bar IT

Excel上に入力ボックスを表示し、入力した内容を反映する、その他もろもろの使い方です。
Inputboxにはメソッドと関数の二種類がありますが、まとめて説明するとややこしいのでここではメソッドだけ説明しています。

スポンサーリンク

入力ボックスを表示してみる

入力ボックスの表示
Application.Inputbox(引数)
何はともあれ出してみましょう。マクロ編集画面を開き、Application.InputBox(“入力してください”)と入れてみます。
マクロでは「対象.メソッド」というような書き方をしますが、ここで言うApplicationとはアプリ、ソフト全体のこと、つまりExcelのことです。Excelにインプットボックスを出して、と命令している形です。
マクロを実行するとこういうのが出ます。
入力してOKを押しても特に何も起こりません。

入力内容をセルに反映する

ボックスは出せたので、今度は入力内容を何かに使ってみます。
まずDim文で入力内容を保存する変数名を決めます。Option Explicitは変数名を指定しないと使えなくするための構文で、なくても動きますが、付けることを推奨します。詳しくはDim文の記事参照。
Application.InputBox(~)の前に変数名 =を付けます。
これで入力→OKという操作を行った場合、入力内容が変数に格納されます。
最後にValueプロパティを使い、Range(“A1”).Value = 戻り値と入力します。A1セルに変数「戻り値」の内容を代入するという命令です。
ふたたびマクロを実行し、適当な内容を入力してOKを押します。
入力した内容がA1に表示されました。とりあえず最低限実用的なものができたようです。

入力ボックスのタイトルを変える

さて、ここまでは直接引数にメッセージを入力していましたが、メッセージはpromptという引数を使っています。
色々追加機能を使うには他の因数を入力する必要があります。他の引数と区別するために、Application.InputBox(prompt:=“入力してください”)という式に修正しておきます。
タイトルを変えてみたいので、Title:=”入力テスト”という文字列を式に追加します。下にごちゃごちゃ表示されているのがInputboxメソッドで使える引数です。いっぱいありますね。
引数と引数の間は,で区切ります。
マクロを実行すると、入力ボックスのタイトルが変わっていることが確認できました。
' vba
Dim 戻り値
戻り値 = Application.InputBox(prompt:="入力してください", Title:="入力テスト")
Range("A1").Value = 戻り値

入力ボックスにデフォルトで何か表示する

ちょっと長くなってきたので、「 _」を入れて式を折り返します(_の前に半角スペースを入れます)。「_」はキーボード右下、Shiftの左のキーをShiftを押しながら押すと入力できます。
デフォルトで何か入力された状態で入力ボックスを出したいので、引数にDefault:=”デフォルト”を入力します。
マクロを実行するとこんな感じになります。
ちなみに、変更せずにOKを押すとそのままデフォルト値が入力されます。
' vba
Dim 戻り値
戻り値 = Application.InputBox(prompt:="入力してください", Title:="入力テスト", _
         Default:="デフォルト")
Range("A1").Value = 戻り値

入力形式を指定する

今度は入力する形式を指定してみます。引数にtype:= 1を入力します。
この「1」は、数字のみ入力可能を意味します。
マクロを実行するとこうなるので、
文字を入れると、
こうなります。数字以外は受け付けません。
数字でさえあればOKです。全角数字もOKですが、半角数字に変換されます。
' vba
Dim 戻り値
戻り値 = Application.InputBox _
         (prompt:="パスワードを入力してください(数字)", _
         Title:="パスワード", _
         Default:="0000", _
         Type:=1)
Range("A1").Value = 戻り値

文字列のみ受け付けたい場合は2ですが、2の場合数字も文字列として認識されるので入力できたりはします。その他色々形式があるんですが、あんま使わない気がするので一回脇に置きます。
なお、この入力形式を指定する機能はInputbox関数にはありません。

キャンセル時の処理を追加

さて実はこのマクロ、ひとつ問題があります。入力ボックスを表示してからキャンセルを押すと……。
変数に対して「False」(偽)という論理値が代入され、それがそのまま表示されてしまいます。キャンセルしても値が代入されてしまうのはInputboxメソッドの仕様です。
キャンセル時に何かさせたい場合、If文を使います。今回はIf 戻り値 = False Thenとし、戻り値がFalseの場合の処理をこの下に入力します。
せっかくなので、MsgBoxメソッドを使うことでメッセージボックスを出すことにします。今回はMsgBox (“入力をキャンセルしました”)と入力します。
キャンセルされた時点でマクロを終了させたい(セルに値を代入させたくない)ので、Exit Subを入力します。Exit=出口で、これを実行するとその後の処理は全て無視されます。
If文が実行されなかった時の処理は、elseから下で指定できます。
End Ifを付けることで、If文が完結します。If~then 処理A、else 処理B、End Ifでワンセットです。
というわけでマクロを実行し、キャンセルを押してみます。
メッセージボックスが表示され、キャンセルされたことが明示されます。A1の値も変化しません。
' vba
Dim 戻り値
戻り値 = Application.InputBox _
         (prompt:="パスワードを入力してください(数字)", _
         Title:="パスワード", _
         Default:="0000", _
         Type:=1)
If 戻り値 = False Then
MsgBox ("入力をキャンセルしました")
Exit Sub
Else
Range("A1").Value = 戻り値
End If

他にも色々書くことはありますが、基本的なInputboxメソッドの使い方はこんなものかと思います。

やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント

モバイルバージョンを終了