【マクロ】インプットボックスの使い方

Excelマクロ編

インプットボックスは、ユーザーの指定する文字列や数値を扱う際に非常に便利な関数(メソッド)です。

条件を詳細に規定することで数値や文字列など適格に値を入力させることも可能です。

今回はそのインプットボックスについて解説します。

インプットボックス関数とメソッドの違い

  • InputBox関数は、VBAの関数の1つ
  • InputBoxメソッドはExcelのアプリケーション

InputBox関数はWord、PowerPointなど他のOffice製品で使用できるのに対し、
InputBoxメソッドはExcel専用のAppicationで、他のOfficeには使用できないという特徴があります。

コードの記載方法のほか、条件設定の際の引数やボタンの位置などの違いがあります。
エクセルのみで完結する場合は、InputBox関数を使えばよいのでは・・・・
と思いがちですが、


数値や文字列の制限をしたい場合はInputBoxメソッドを使用します。

ですので、使用方法をよく理解して正しい使い分けをしましょう。

InputBox関数について

はじめにインプットボックス関数について解説します。

コードの記述方法と引数は以下の通りです。

InputBox(Prompt,[Title],[Default],[XPos],[YPos],[HelpFile],[Context])

引数説明省略可否
Prompt入力ダイアログボックス内に表示するメッセージの文字列を指定します。不可
Title入力ダイアログボックスのタイトルバーに表示する文字列を指定します。
Default入力用のテキストボックスに既定値で表示する文字列を指定します。
XPos入力ダイアログボックスを表示する位置のX座標を指定します。
YPos入力ダイアログボックスを表示する位置のY座標を指定します。
HelpFileダイアログボックスに状況依存のヘルプを設定するために使用する、
ヘルプファイルの名前を指定します。
Contextヘルプトピックに指定したコンテキスト番号を表す数式を指定します。

InputBox関数のサンプルコード

見ただけだと分かりずらいので、実際のコードを見てみましょう。

Sub test()

Dim Getstr

Getstr = InputBox(“文章を入力してください”, “タイトル”, “初期値”)

End Sub

上のコードではタイトルと、ユーザーに対するメッセージ、あらかじめ記入欄に記入されている初期値をいじりました。

そのほか、XPos,YPosでは画面上のどこにポップアップ画面が出てきてほしいかを指定できます。

キャンセルや未入力時の処理について

  • 入力のキャンセル
  • ×ボタンでの削除
  • 未入力で確定

ユーザーが上記の対応をした場合、エラーで返されることはありません。

しかし何も起こらないと味気がなかったり、あるいはミスの元となる可能性があります。
必ず本筋を外れた場合の処置を施しましょう。

  • キャンセル → StrPtr関数が0かどうかで判定
  • 未入力 → 入力値が ””(空欄) かどうかで判定

上記を踏まえたうえでコード例を見てみましょう。

Sub test2()

Dim Getstr

Getstr = InputBox(“文章を入力してください”, “タイトル”, “初期値”)

‘##################キャンセル判定####################

If StrPtr(Getstr) = 0 Then

MsgBox "キャンセルされました。"

‘##################未入力判定########################

ElseIf Getstr = “” Then

MsgBox "未入力です。"

End If

End Sub

InputBoxメソッド

続いてInputBoxメソッドについて解説します。

先に述べた通り、エクセルのみで完結する場合でも入力に制限をかけたい場合はこちらを使用しましょう。

コードの記述方法と引数は以下の通りです。

Application.InputBox (Prompt[,Title][,Default][,Left][,Top][,HelpFile][,HelpContextID][,Type])

数名説明省略可否
Prompt入力ダイアログボックス内に表示するメッセージの文字列を指定します。不可
Title入力ダイアログボックスのタイトルバーに表示する文字列を指定します。
Default入力用のテキストボックスに既定値で表示する文字列を指定します。
Left入力ダイアログボックスを表示する位置のX座標を指定します。
Top入力ダイアログボックスを表示する位置のY座標を指定します。
HelpFileダイアログ ボックスに状況依存のヘルプを設定するために使用する、
ヘルプファイルの名前を指定します。
HelpContextIDヘルプトピックに指定したコンテキスト番号を表す数式を指定します。
Type返されるデータ型を指定します。 省略すると文字列を返します。

InputBoxメソッドのサンプルコード

Sub test3()

Dim GetStr

GetStr = Application.InputBox(“文字を入力してください”, “タイトル”, “初期値”)

End Sub

上のコードではタイトルと、ユーザーに対するメッセージ、あらかじめ記入欄に記入されている初期値をいじりました。

関数とは異なり、ボタンが右下に表示されます。

引数 Type

InputBox関数にはない引数の「Type」です。
引数を指定することで、入力できるテキストのタイプを指定できます。

説明
0数式
1数値
2文字列
4論理値(True/False)
8セル(Rangeオブジェクト)
16#N/Aなどのエラー値
64数値配列

実際にTypeを指定してみます。

Sub test4()

Dim GetStr

GetStr = Application.InputBox(“数値を入力してください”, “タイトル”, Type:=1)

End Sub

Type 1を指定し、数値のみ入力できるようにしました。
実際に100と入力するとそのままマクロが終了します。

一方で、文字列aaaと入力すると、
「数値が正しくありません」のエラーが発報しました。

キャンセルや未入力時の処理について

関数の時と同様にキャンセルや未入力時の処置を組み込みます。

  • キャンセル → 入力値が False かどうかで判定
  • 未入力 → 入力値が ””(空欄) かどうかで判定

関数の時と異なることとして、キャンセルはFalseで判定します。

Sub test5()

Dim GetStr

GetStr = Application.InputBox(“数値を入力してください”, “タイトル”)

‘##################キャンセル判定####################
Select Case GetStr

Case False

MsgBox "キャンセルされました。"
End

‘##################未入力判定########################
Case “”

MsgBox "未入力です。"

‘##################正常判定##########################
Case Else

MsgBox GetStr

End Select

End Sub

まとめ

InputBox関数とメソッドの使い方を解説しました。

InputBoxはユーザーに値を入力してもらう便利なツールです。
しかしその反面間違いも起こりやすいため、エラーの処置をしっかり施す必要があります。

コメント

タイトルとURLをコピーしました