VBA Application.InputBox メソッド/InputBox関数

 下図のようなダイアログボックスを表示して、ユーザーさんに何かを入力してもらって、その値を使ってあれやこれやを処理するときに使うのが、Application.InputBoxメソッドInputBox関数 です(どちらも使い方はほとんど同じですが、微妙な違いがあるので、両方とも解説します)。

 InputBoxメソッド0

 ダイアログボックスの一番上の青いところに表示されている文字を Title, ユーザーさんが入力するテキストボックスのすぐ上に表示されている文字を Prompt といいます。いずれも InputBoxメソッドや InputBox関数の引数で指定できます。ちなみに prompt は「駆り立てる、促す」という意味の単語です。つまりユーザーさんに「ここに何か書いてくださいな」と促すメッセージなのです。

Application.InputBoxメソッド

 InputBoxメソッドでは最大で 8 個も引数が指定できて色々な使い方ができるのですが、それをいっぺんに説明するのは大変だし、おそらく一生使わないような引数もあるので、ここでは普通によく使われる引数をピックアップして、簡単なマクロを作成しながら解説していきます。
 

ダイアログボックスで入力した値をセルに書き込みます

 まずは、InputBoxメソッドの基本的な使い方です。

 Sub InputBoxTest1()

  Dim x As Variant
  Dim myprompt As String
  Dim mytitle As String

  myprompt = "何か入力してください"
  mytitle = "セルA1に転記"

  x = Application.InputBox(myprompt, mytitle)

  Range("A1") = x

 End Sub

 このマクロを実行すると、ダイアログボックスがぱっと現れて
「何か入力してください」
と促されるので、素直に適当な文字や数値をテキストボックスに入力すると、その内容がセル A1 に書き込まれます。

 InputBoxメソッド1

 ユーザーさんが何を入力するのかわからないので、変数 x は Variant型で宣言してあります。このマクロでは引数に Prompt と Title の 2 つだけを指定しています。InputBoxメソッドの引数のうちのほとんどは省くことがきますけど、Prompt だけは省略できないので注意してください。
 

入力されるデータ型を指定します

 InputBoxメソッドではテキストボックスに入力されるデータの型を Type という引数で指定することができます。これは後半で解説する InputBox関数には備わっていない機能です。引数の値と対応するデータ型は次のようになっています。

Type データ型
0 数式
1 数値
2 文字列
4 論理値
8 セル参照
16 エラー値
64 値の配列

 例としてデータ型を数値に限定するマクロを作ってみます。

 Sub InputBoxTest2()

  Dim x As Double
  Dim myprompt1 As String
  Dim myprompt2 As String
  Dim mytitle As String

  myprompt1 = "1つめの数字を入力してください"
  myprompt2 = "2つめの数字を入力してください"

  x = Application.InputBox(myprompt1, Type:=1)
  y = Application.InputBox(myprompt2, Type:=1)

  MsgBox "答えは" & x + y & "です"

 End Sub

 マクロを実行して、ダイアログボックスに数字を 2 回入力すると、2 つの数字を足し算して答えを返してくれます。

 InputBoxメソッド2

 このマクロでは InputBox の引数で「Type:=1」と指定してあるので、数値以外のものを入力すると「数値が正しくありません」と返されてしまいます。

 InputBoxメソッド3

 次は Type に 0 を指定して、数式を入力してもらうマクロを作成してみます。

 Sub InputBoxTest3()

  Dim x As Variant
  Dim myprompt As String

  myprompt = "計算式を入力してください"

  x = Application.InputBox(myprompt, Type:=0)

  Range("A1") = x

 End Sub

 マクロを実行すると「計算式を入力してください」と促されるので、必ず「 = 」から始めて「=20+30」のように入力すると、答えがセル A1 に表示されます。ただし x を Msgbox関数で表示させようとすると、そのまま「=20+30」が表示されてしまいます。。x に入っているのは、あくまで文字列です。しかし、ワークシートのセルは先頭に「 = 」をつく文字列を数式だと判断して、自動的に計算処理します。つまり上のマクロは、人間がワークシートに数式を入力するのと同じような作業をしているのです。

 次はセル参照を引数とする Type = 8 です。ダイアログボックスで範囲を指定して背景色を緑色にするマクロを作成してみます。

 Sub InputBoxTest4()

  Dim myarea As Range
  Dim myprompt As String

  myprompt = "色をつける範囲をドラッグしてください"

  Set myarea = Application.InputBox(myprompt, Type:=8)
  myarea.Interior.ColorIndex = 10

 End Sub

 マクロを実行すると「色をつける範囲をドラッグしてください」と促されるので、適当なセル範囲をマウスで選択すると、その部分が緑色になります。

InputBox関数

 InputBox関数は InputBoxメソッドにとても良く似たはたらきをします。どちらもダイアログボックスを表示させてユーザーさんから色々なデータを受け取ってマクロで処理します。Prompt のみが省略不可能な引数であることも同じです。

 ただし、もちろん細かな違いはいくつかあって、一番大きな違いは InputBox関数を普通に使っていては、受け取るデータ型を制限することができないということです。つまり、InputBox関数には Type という引数がありません。Type が指定できないということは、InputBoxメソッドでは可能だったセル範囲の受け取りなどはできないということです。

 ユーザーさんに住所を登録してもらうマクロです。

 Sub AdressData()

  Dim myadress As String
  Dim myprompt As String
  Dim mytitle As String

  myprompt = "住所を入力してください"
  mytitle = "住所の登録"

  myadress = InputBox(myprompt, mytitle, Default:="東京都")

  Range("B2").Value = myadress

 End Sub

 マクロを実行すると次のようなダイアログボックスが現れます。

 InputBox関数のダイアログボックス

 すでに「東京都」という文字が入力されていますが、これは引数の Default で指定しているからです。テキストボックスに住所を入力して [OK] ボタンを押すと、その内容がセルB2 に書き込まれます。 ≫ VBA の技術

Google広告
スポンサーリンク
スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください