VBA InputBoxで入力を受け付ける。InputBoxを繰り返す。
マクロの記録でできることをやっていても面白くないので(記録したコードから勉強することはいいことなのですが)
今回はInputBoxを使います。
InputBoxの使い方
Sub Training() 'InputBoxの使い方 Dim st As String st = InputBox("入力してください") MsgBox st + "が入力されました" End Sub
これをボタン1に登録し、実行します
いい感じですね。複数回呼び出すやり方としてfor や whileがあります。
他のプログラミングでもこの繰り返しはおなじみなので説明は省略します。
'説明:セルのA1~A10に1~10を入力する Sub test() For i = 1 To 10 Worksheets("Sheet1").Cells(i, 1).Value = i Next End Sub
こんな感じです。今回は入力回数を任意の数で辞める方法を考えます。
While True を使い、Exit Subを用いる
While True Wend
とすることで無限に繰り返しが起こります。
ここで、あるタイミングで条件分岐をしExit Subをすることで操作が終わります。
その例として、
Sub InputTraining() While True Dim result As Integer result = MsgBox("入力を行いますか",vbYesNo) If result = 7 Then MsgBox("終了します") Exit Sub[f:id:rkprog:20151027152555p:plain] End if Dim st As String st = InputBox("入力してください") MsgBox st+"が入力されました" Wend End Sub
こうすることで、任意のタイミングでループを抜けることが出来ます。
MsgBox,InputBoxの返り値に関しては以下のサイトを見てください。
MsgBoxにvbYesNoのオプションを付けると、Noが押されたときresultが7になります。Yesが押されると6になるのですが今回はどうでもいいです。
実際に実行してみると上手くいくのが分かるかと思います。
最後に読み込んだ値を書き込む
まず、入力された値をセルA1に入れます。
Sub InputTraining() While True Dim result As Integer result = MsgBox("入力を行いますか", vbYesNo) If result = 7 Then MsgBox ("終了します") Exit Sub End If Dim st As String st = InputBox("入力してください") Cells(1, 1) = st ' Range("A1") = st Wend End Sub
これで、毎回A1にデータが残ります。今回、Cellsを使ったのですがRangeの方がなじみのある人はそちらを使ってください。
ただこれではA1に上書きされていくので、下に連ねていくためにCellsの行を指定します。
Dim L As Integer L = Cells(Rows.Count, 1).End(xlUp).Row + 1
を使うことで今まで書かれている最終行の次の行を取得できます。
これを入れて
Sub InputTraining() While True Dim result As Integer result = MsgBox("入力を行いますか",vbYesNo) If result = 7 Then MsgBox("終了します") Exit Sub End if Dim L As Integer L = Cells(Rows.count,1).End(xlup).Row+1 Dim st As String st = InputBox("入力してください") Cells(L,1) = st Wend
これでうまくいっているのが分かるかと思います。
これを応用して列番号を切り替えていくことで名前と点数を連続で入力していけます。