InputBoxについて事前にWebで検索してみたりして少し勉強してみました。2種類あるらしいのですが、よくわからないかったので詳しく教えてくださいm(_ _)m
おっ、えらい! 調べてみたんですね(^^) 実は2種類にユーザーフォームで自作すれば3種類になるんですね。では、InputBoxについては是非知っておいてほしいと思うので詳しく解説していきますね!
前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます
前回記事でわかったことは
・MsgBox関数の使い方がわかりました
・ボタンやアイコンの定数についてや戻り値の使い方がわかりました
・文字列の改行に使用するには定数を使うことがわかりました
【この記事でわかることは】
・InputBox関数 の使い方がわかります
・InputBoxメソッド の使い方がわかります
・二つの InputBox の違いがわかります
InputBox とは
マクロ実行で使用する文字列やデータを設定したいときは、次のような方法を使います
① マクロ内に設定値を直接書く
② セルに設定値を入力しておき、そのデータを取得して使用する
③ InputBoxを使って設定値の入力を求める
それぞれに利点や欠点がありますが、今回はこの InputBox を使う方法を解説します
InputBox の利点としては、実行する都度設定値を柔軟に変更できるというところにあります
InputBox には次の2種類があるんです!Microsoftリファレンスの説明文を見てみましょう
InputBox 関数 の説明文
ダイアログボックスにプロンプトを表示し、ユーザーがテキストを入力するかボタンをクリックするまで待機し、テキストボックスのコンテンツが含まれる文字列を返します
Application.InputBox メソッド (Excel) の説明文
ユーザー入力用のダイアログボックスを表示します。 表示したダイアログボックスに入力された情報を返します
これだけじゃ、全くわかりませんね(^^ゞ それでは、それぞれ比較しながら解説していきましょう
構文の比較
InputoBox 関数の構文
構文
InputBox(prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ])
Application.InputBox メソッドの構文
構文
Application.InputBox (Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)
違っているのは、Application.InputBox の Type の部分ですね
細かい部分を比較していきます
prompt を比較
引数 Prompt に指定できる文字数の比較です
名前 | 種類 | 文字数の比較 |
---|---|---|
InputBox | 関数 | 最大(半角)で約 1024 文字使用できます |
Application.InputBox | メソッド | 最大(半角)長は 255 文字です 字数オーバーでエラー(2015)が発生します |
表示できる文字数はフォントの種類などによって変わります。フォントの種類や文字サイズを指定することはできません。文字列を改行する方法は前回記事「MsgBox関数」を参照してください
Title を比較
・両方とも「省略可能」ですが、省略した場合の表示が異なっています
名前 | 種類 | 省略した場合に表示されるタイトル |
---|---|---|
InputBox | 関数 | アプリケーション名「Microsoft Excel」が表示されます |
Application.InputBox | メソッド | 既定値の「入力」がタイトル バーに表示されます |
default を比較
・default は、ダイアログが表示されたとき、最初から入力ボックスに表示しておく文字列を指定するオプションです
・両方とも「省略可能」です。省略した場合の表示は空欄です
・この部分は、関数・メソッド共に同じ動作のようです
「XPos と YPos」「 Left と Top」を比較
・このオプションは両方とも「省略可能」です。省略した場合の表示位置は、
・InputBox関数は、水平方向は中央寄せ、垂直方向は画面を約3分1下がった位置に配置されます
・InputBoxメソッドは、前回表示位置と同じ場所に表示されます
・水平方向(ヨコ)の位置
名前 | パーツ名 | 省略した場合に表示されるタイトル |
---|---|---|
InputBox 関数 | XPos | 画面の左端からダイアログボックスの左端までの水平方向の距離を twip 単位で指定します |
InputBox メソッド | Left | 画面の左上隅を基準として、ダイアログボックスの X 座標を ポイント単位で指定します |
・垂直方向(タテ)の位置
名前 | パーツ名 | 省略した場合に表示されるタイトル |
---|---|---|
InputBox 関数 | YPos | 画面の上部からダイアログ ボックスの上端までの縦方向の距離を twip 単位で指定します |
InputBox メソッド | Top | 画面の左上隅を基準として、ダイアログ ボックスの Y 座標を ポイント単位で指定します |
HelpFile と Context(HelpContextId) を比較
・このオプションは両方とも「省略可能」です
・VBAで独自のソフトを開発し、独自のヘルプファイルを作成しているような方以外は、このヘルプを表示するオプションは不要と思われます
・独自のヘルプファイルを作成したことが無いのでこのオプションをテストできていません。大変申し訳ありませんが、この部分の解説は省略させていただきリファレンスの参照を案内させていただきます
InputBox 関数 引数
パーツ | 説明 |
---|---|
helpfile | 省略可能。ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定します。 引数helpfileを指定する場合は、引数contextも必ず指定する必要があります。 |
context | 省略可能。ヘルプ作成者によって適切なヘルプ トピックに割り当てられた ヘルプ コンテキスト番号を示す数式を指定します |
Application.InputBox メソッド パラメーター
名前 | データ型 | 説明 |
---|---|---|
HelpFile | バリアント型 | 省略可能。ヘルプファイルの名前を指定します。ただし、 引数 HelpContextID を共に指定する必要があります。 ダイアログボックス内に [ヘルプ] ボタンが表示されます。 |
HelpContextID | バリアント型 | 省略可能。引数 HelpFile で指定したヘルプファイル内のヘルプ トピックのコンテキスト ID 番号を指定します。 |
Type オプションについて
・このオプションは、Application.InputBox メソッドのみです
・返されるデータ型を指定できるオプションです
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
Type | 省略可能 | Variant | 返されるデータの型を指定します。 この引数を省略すると、 ダイアログボックスは文字列 (テキスト) を返します。 |
Type 引数で渡すことができる値は次の表のとおりです。 いずれかの値、または値の合計を指定できます。 たとえば、テキストと数値の両方を入力可能な入力ボックスにしたい場合、Type を 1 + 2 に設定します
値 | 説明 |
---|---|
0 | 数式 |
1 | 数値 |
2 | 文字列 (テキスト) |
4 | 論理値 (True または False) |
8 | セル参照 (Range オブジェクト) |
16 | #N/A などのエラー値 |
64 | 値の配列 |
戻り値を比較
・戻り値を比較すると次のような違いがあります
名前 | 戻り値 | [キャンセル]ボタン選択時の戻り値 |
---|---|---|
InputBox 関数 | 文字列 | 長さ 0 の文字列 [””] を返します |
InputBox メソッド | Type で指定したデータ型 | False を返します |
・それぞれの戻り値を考慮してコードを書く必要があるということですね
InputBox の使用例
InputBox関数のサンプルコード
ユーザーにターゲット月の入力を求める例です。インプットボックスを開いた時マクロ実行月が入力ボックスに表示されるようにしています
'InputBox関数のサンプルコード
Sub InputBoxfunctionSample()
Dim tgMonth As String '戻り値は文字列
Dim msg, mm
'promptを設定
msg = "データを取得したい[月]を入力してください。"
'規定値として実行当月を取得して代入
mm = Month(Date)
'キャンセルされた場合戻り値は""になります
tgMonth = InputBox(msg, "月を指定", mm)
If tgMonth = "" Then
Exit Sub
ElseIf IsNumeric(tgMonth) = False Then
'IsNumeric関数は引数が数値として認識できない場合はFalseを返す
MsgBox "月を(数字)入力して下さい"
Else
MsgBox "「" & tgMonth & "」が入力されました"
End If
End Sub
規定値として実行当月を取得してインプットボックスに代入して表示しています。
Applocation.InputBoxメソッドのサンプルコード
ユーザーにターゲット月の入力を求める例です。戻り値を「Type:=1」の数値に設定したいます
'Application.InputBoxメソッドのサンプルコード
Sub InputBoxMethodSample()
Dim tgMonth As Long 'Type:=1の戻り値数値
Dim msg, mm
'promptを設定
msg = "ブラフを作成する[月]を入力してください。"
'規定値として実行当月を取得して代入
mm = Month(Date)
'キャンセルされた場合戻り値はElseが代入されtgMonth = 0 になります
tgMonth = Application.InputBox(msg, "月の指定", mm, Type:=1)
'入力データが月なので1~12の間なのかを検査
If tgMonth > 0 And tgMonth < 13 Then
MsgBox "「" & tgMonth & "」が入力されました"
ElseIf tgMonth = 0 Then
Exit Sub
Else
MsgBox "月を(数字)入力して下さい"
End If
End Sub
入力値が数値以外の場合は、右画像の注意メッセージが表示されます
まとめ(おわりに)
は~い! InputBox の説明はおしまいにします(^^)/
理解できましたか?関数とメソッドをうまく使い分けてくださいね!
では、今回のサンプルでDate関数を使ったので、次回は 日付と時刻の関数 について解説しておきましょう! できれば、また予習しておいてね!
はい! 文字列だけなら InputBox関数で、それ以外なら InputBoxメソッドという感じで使い分ければいいんですね。さっそく復習してみます!
日付と時刻の関数 についても自習してみま~す(^^;
まとめと感想など
・マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください!
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!
★★★ ランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/
記事のサンプルファイルをダウンロードできます
この記事のサンプルはこのリンク先からダウンロードできます!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
・InputBox関数 と InputBoxメソッド の違いと使い方がわかりました
・InputBox関数 の戻り値は文字列なので数値を扱う場合変換が必要
・InputBoxメソッド は Type で各種の戻り値を指定できます