今回はExcel VBAのInputBoxの機能について、基本的な使い方を解説します。
InputBoxとは何か
InputBoxというのは、VBAの処理中にユーザーが自由に入力することのできるボックスを出現させるための関数です。これによって任意のデータを入力したり、そのデータによって後続の処理を変更することもできます。
具体的には以下のように、予め設定した文章を元に、赤線部分のボックスに任意のデータを入力してもらうためのボックスを出現させます。
InputBoxの使用方法
使用方法を紹介します。例えばExcelで以下のように、B2セルに入力する値をユーザーに入力してもらうことを想定します。なお、この例の内容では実際に役には立ちませんが、メリットは次項で別途説明します。
以下のようにコードを記述します。これは、”B2セルに、インプットボックスで入力した値を入力する”という内容です。
Cells(2, 2).Value = InputBox(“担当地域を入力してください:”)
実行すると、以下のようにボックスが出現しますので、任意のデータを入力し、”OK”を押下します。
処理が終了すると、以下のようにB2セルに”東京”が入力されました。
表示する文章中で改行する
InputBoxの使用に関してよく出る疑問が、予め設定する文章中で改行するにはどうすればいいか、というものです。
これを実現するには、以下のようにコードを記述します。
Cells(2, 2).Value = InputBox(“担当地域を入力してください:” & vbCrLf & “(漢字2文字)”)
ポイントは”vbCrLf”です。これがVBAにおける改行を意味します。文章と改行と文章を演算子の”&”で連結することで、2つの文章を改行を挟んで表示させることができます。
InputBoxの値にが後続の処理に影響を与える
InputBoxは、後続の処理を分岐させる際にも便利です。
以下のように新製品の発売とそれに伴うイベントの時期を入力するフォームを用意しました。このフォームを使って解説します。
まずは以下のようなコードで、InputBoxを2つ使って、新製品が発売される年と月を入力してもらいます。入力した値を“yyyy年m月”形式でC2セルに入力します。
Dim yr As Integer, m As Integer
yr = InputBox(“新製品の発売年を入力してください:” & vbCrLf & “(yyyy)”)
m = InputBox(“新製品の発売月を入力してください:” & vbCrLf & “(m)”)
Cells(2, 3) = Format(DateSerial(yr, m, 1), “yyyy年m月”)
試しに2025年の1月に新製品を発売する前提で入力してみます。
なおDateSerial関数は()内の引数で指定した年・月・日によって日付データを返します。今回はDateSerial(yr, m, 1)となっているので、InputBoxで入力したyrとmの年月の、1日を返します。上の例では、”2025/1/1″を返します。
また、Format関数は指定した値を指定した書式に変換します。ここではDateSerial(yr, m, 1)が指定した値、”yyyy年m月”が指定した書式です。DateSerialが2025/1/1でしたから、これを”yyyy年m月”形式に変換して、”2025年1月”となります。
後続の処理
続いて、C2の値を元に、新製品発売前の審査会を1か月前に、発売後の検討会を1か月後に設定します。コードとしては以下の通りです。
Dim launch As Date
launch = CDate(Cells(2, 3).Value)
Cells(3, 3) = Format(DateAdd(“m”, -1, launch), “yyyy年m月”)
Cells(4, 3) = Format(DateAdd(“m”, 1, launch), “yyyy年m月”)
CDateは指定した値を日付型に変換する関数です。C2には”2025/1/1″が”2025年1月”というフォーマットで入力されています。ここではCDateで取得した“2025/1/1″が変数のlaunchに格納されます。
続いてDateAdd関数は()内の引数で指定した日付データに対して、日付の加減を行います。例えば上記のDateAdd(“m”, -1, launch)は、変数launchで指定した値の”m”つまり月データに対して”-1″する、つまり前月を指定するということです。
最終的に、コード全体としては以下の通りとなります。
Dim yr As Integer, m As Integer
yr = InputBox(“新製品の発売年を入力してください:” & vbCrLf & “(yyyy)”)
m = InputBox(“新製品の発売月を入力してください:” & vbCrLf & “(m)”)
Cells(2, 3) = Format(DateSerial(yr, m, 1), “yyyy年m月”)
Dim launch As Date
launch = CDate(Cells(2, 3).Value)
Cells(3, 3) = Format(DateAdd(“m”, -1, launch), “yyyy年m月”)
Cells(4, 3) = Format(DateAdd(“m”, 1, launch), “yyyy年m月”)
実行結果は以下の通りです。
コメント