このサイトはCocoonを使っています。現在「ミックスブルー [作者: y.hiroaki氏]」スキンを適用中です(^^)/

Excel VBA InputBox の使い方をマスターしよう

スポンサーリンク

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.InputBoxTypeの部分ですね

細かい部分を比較していきます

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省略可能。ヘルプ作成者によって適切なヘルプ トピックに割り当てられた
ヘルプ コンテキスト番号を示す数式を指定します
参照元:https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/inputbox-function

Application.InputBox メソッド パラメーター

名前データ型説明
HelpFileバリアント型省略可能ヘルプファイルの名前を指定します。ただし、
引数 HelpContextID を共に指定する必要があります。
ダイアログボックス内に [ヘルプ] ボタンが表示されます。
HelpContextIDバリアント型省略可能引数 HelpFile で指定したヘルプファイル内のヘルプ
トピックのコンテキスト ID 番号を指定します。
参照元:https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.inputbox

Type オプションについて

・このオプションは、Application.InputBox メソッドのみです
・返されるデータ型を指定できるオプションです

名前必須 / オプションデータ型説明
Type省略可能Variant返されるデータの型を指定します。 この引数を省略すると、
ダイアログボックスは文字列 (テキスト) を返します。
参照元:https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.inputbox

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メソッドという感じで使い分ければいいんですね。さっそく復習してみます!
日付と時刻の関数 についても自習してみま~す(^^;

まとめと感想など

・InputBox関数 とInputBoxメソッド の違いと使い方がわかりました
InputBox関数 の戻り値は文字列なので数値を扱う場合変換が必要
・InputBoxメソッド は Type で各種の戻り値を指定できます

マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!


ブログランキングに参加しています(^^)応援よろしくお願いしますm(_ _)m

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロVBA」の記事を継続して書いていきます

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にもご期待ください(^^)/

記事のサンプルファイルをダウンロードできます

今回の記事のサンプルをダウンロードできるようにしています
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください

スポンサーリンク

スポンサーリンク