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

bar IT

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

Advertisements

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

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

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

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

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

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

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

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

入力形式を指定する

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

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

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

inputbox27
さて実はこのマクロ、ひとつ問題があります。入力ボックスを表示してからキャンセルを押すと……。
inputbox28
変数に対して「False」(偽)という論理値が代入され、それがそのまま表示されてしまいます。キャンセルしても値が代入されてしまうのはInputboxメソッドの仕様です。
inputbox20
キャンセル時に何かさせたい場合、If文を使います。今回はIf 戻り値 = False Thenとし、戻り値がFalseの場合の処理をこの下に入力します。
inputbox21
せっかくなので、MsgBoxメソッドを使うことでメッセージボックスを出すことにします。今回はMsgBox (“入力をキャンセルしました”)と入力します。
inputbox22
キャンセルされた時点でマクロを終了させたい(セルに値を代入させたくない)ので、Exit Subを入力します。Exit=出口で、これを実行するとその後の処理は全て無視されます。
inputbox23
If文が実行されなかった時の処理は、elseから下で指定できます。
inputbox24
End Ifを付けることで、If文が完結します。If~then 処理A、else 処理B、End Ifでワンセットです。
inputbox25
というわけでマクロを実行し、キャンセルを押してみます。
inputbox26
メッセージボックスが表示され、キャンセルされたことが明示されます。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やメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント