読者です 読者をやめる 読者になる 読者になる

プログラミング メモ memo.txt

一度考えたコードを忘れるのはもったいないので、メモとして残していきます。現在、JavaとC++とVBAを勉強しているので、そこらへん書きます。

VBA InputBoxで入力を受け付ける。InputBoxを繰り返す。

f:id:rkprog:20151027150606p:plain

マクロの記録でできることをやっていても面白くないので(記録したコードから勉強することはいいことなのですが)

今回はInputBoxを使います。

InputBoxの使い方

Sub Training()

'InputBoxの使い方

Dim st As String
st = InputBox("入力してください")
MsgBox st + "が入力されました"


End Sub

これをボタン1に登録し、実行します

f:id:rkprog:20151027151431p:plain

f:id:rkprog:20151027151455p:plain

f:id:rkprog:20151027151518p:plain

いい感じですね。複数回呼び出すやり方としてfor や whileがあります。

他のプログラミングでもこの繰り返しはおなじみなので説明は省略します。

excelvba.pc-users.net

'説明:セルの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になるのですが今回はどうでもいいです。

実際に実行してみると上手くいくのが分かるかと思います。

f:id:rkprog:20151027152555p:plain

f:id:rkprog:20151027152619p:plain

f:id:rkprog:20151027152656p:plain


Office TANAKA - Excel VBA関数[MsgBox関数]

最後に読み込んだ値を書き込む

まず、入力された値をセル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

f:id:rkprog:20151027153341p:plain

これでうまくいっているのが分かるかと思います。

これを応用して列番号を切り替えていくことで名前と点数を連続で入力していけます。