こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで入力ダイアログを作ったことがありますか?
入力ダイアログは、ちょっとした入力をしてもらいたいときに覚えておくととても便利です。
そこで今回は、
・InputBoxを使った入力ダイアログの使い方
といった基礎的なことから、
・OK、キャンセルを押した場合の処理の作り方
・パスワードのようなアスタリスク表示したい場合の対処方法
といった応用的な方法まで、徹底的に解説します!
InputBoxとは
最初に、InputBoxの使い方について説明します。
InputBoxは次のように書きます。
Application.InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[HelpContextId],[Type])
No | 項目名 | 概要 |
---|---|---|
1 | Prompt | ダイアログに表示するメッセージ。この項目のみ必須 |
2 | Title | ダイアログのに表示するタイトル |
3 | Default | 入力項目のデフォルト値 |
4 | XPos | ダイアログの表示位置(X軸) |
5 | YPos | ダイアログの表示位置(Y軸) |
6 | HelpFile | ヘルプ用のファイルを指定。指定するとヘルプボタンが追加される |
7 | HelpContextId | ヘルプボタンクリック時に表示するページ位置 |
8 | Type | 入力タイプ(数式、数値、文字列など) |
引数がすこし多いですが、すべて覚える必要はありません。
Prompt、Title、Default、Typeあたりはよく使うので、覚えておくのがおすすめです!
補足:Typeについて
Typeのみ少しわかりづらいので補足します。
Typeは、数値のみ、文字列のみなど入力タイプを指定したいときに使います。
入力タイプは以下の通りです。
値 | 型 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字列 |
4 | 論理値(True/False) |
8 | セル参照(Rangeオブジェクト) |
16 | エラー値(#N/Aなど) |
64 | 数値配列 |
たとえば、数値のみ入力させたい場合は、次のように書きます。
Sub Test() Dim Num As Long Num = Application.InputBox(Prompt:="数値を入力してください", Type:=1) MsgBox Num & "を入力しました" End Sub
数値以外を入力すると、次のように警告メッセージを表示します。
事前に入力するタイプが決まっている場合は、設定しておくと便利ですね。
InputBoxを使ったサンプルコード
最後に、サンプルコードをもとに応用的な使い方について解説します。
サンプルコード:
Sub Test2() Dim strName As String strName = Application.InputBox(Prompt:="名前を入力してください", Type:=2) 'キャンセルした場合 If strName = "False" Then MsgBox "キャンセルされました。" Exit Sub '数値が入っている場合 ElseIf IsNumeric(strName) = True Then MsgBox "数値が入力されています。" & vbCrLf & _ "文字列を入力してください。", vbExclamation Exit Sub Else MsgBox strName & "が入力されました。", vbInformation End If End Sub
キャンセルクリック時のメッセージ:
数値を入力したときのメッセージ:
文字列を入力したときのメッセージ:
入力タイプが文字列(Type:=2)でキャンセルを押した場合は、「“False”」が戻り値として返ってくるため条件式を追加しています。
また、入力タイプが数値のみ(Type:=1)のときは文字列入力で自動で警告メッセージがでましたが、入力タイプが文字列(Type:=2)の場合は数値を入力しても文字列として認識されてしまうため条件式を追加しています。
入力ダイアログを使う場合は、予期せぬ値が戻り値としてきたときにも処理が動くことを意識して、サンプルのように条件をつけていくのがおすすめです!
if文の使い方、MsgBoxの使い方については以下で詳しく解説していますので、気になる方は見てみてくださいね!
補足:パスワードの入力でアスタリスク(*)を使用したい方へ
InputBoxはちょっとした確認メッセージとして便利なのですが、パスワードのような入力した値をアスタリスク(*)で表示することができません。
そのため、アスタリスク(*)表示したい場合は、ユーザーフォームを使うのがおすすめです!
ユーザーフォームの作り方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAで入力ダイアログを作る方法について解説しました!
入力ダイアログを使うと、少ない行数で簡単に入力画面を使った処理を作ることができます。
覚えておくととても便利なので、ぜひ使ってみてくださいね!