ユーザー入力データを取得し、データからテーブルの残りの部分を埋めるテーブルがあります。これまでのところ、ユーザー データからテーブルに自動的に入力するマクロを作成しました。
ユーザーにマクロを実行する回数を入力してもらいたい (各テーブルには 1 日分の入力が表示されるため) が、マクロを実行するたびに同じスペースが埋められ、複数日分の値が表示されないテーブル。
マクロがわからないので、ユーザー入力を列に格納する汎用マクロがあると仮定しましょう。
Sub InputMacro()
Range("B1:B100").Value = InputBox("What do you want to store in column B")
End Sub
これをループしたい場合は、最初にマクロをパラメータ化する必要があります。つまり、各ループステップで変更したい部分を柔軟にする必要があります。たとえば、複数の列を実行する場合は、次のようにします。
Sub InputMacro_new(intColNumber As Integer, Optional lngRowNumber As Long = 100)
Cells(1, intColNumber).Resize(lngRowNumber) = _
InputBox("What do you want to store in column " & _
Split(Cells(1, intColNumber).Address, "$")(1))
End Sub
これでパラメーターが受け入れられます。つまり、列 B を埋めるためにintColNumber
呼び出すことができます。デフォルトで 100 であるオプションのパラメーターも提供したことに注意してください。このパラメーターを提供する必要はありませんが、必要に応じてデフォルトをオーバーライドできます。)InputMacro_New 2
lngRowNumber
InputMacro_New 2, 50
これで、マクロを呼び出す別のマクロでループを作成できます。
Sub MyLoop()
Dim intCol As Integer, varMaxCols As Variant
varMaxCols = InputBox("How many columns do you want to fill?")
If Not IsNumber(varMaxCols) Then Exit Sub
ElseIf varMaxCols < 1 Or varMaxCols > 255 Then Exit Sub
For intCol = 1 To varMaxCols
InputMacro_new intCol
Next intCol
End Sub
もちろん、必要に応じて、両方を 1 つの大きなマクロに結合することもできますが、特に. 大きなマクロの場合は、小さな手順に分割することをお勧めします。