1

ユーザー入力データを取得し、データからテーブルの残りの部分を埋めるテーブルがあります。これまでのところ、ユーザー データからテーブルに自動的に入力するマクロを作成しました。

ユーザーにマクロを実行する回数を入力してもらいたい (各テーブルには 1 日分の入力が表示されるため) が、マクロを実行するたびに同じスペースが埋められ、複数日分の値が表示されないテーブル。

4

1 に答える 1

0

マクロがわからないので、ユーザー入力を列に格納する汎用マクロがあると仮定しましょう。

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 lngRowNumberInputMacro_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 つの大きなマクロに結合することもできますが、特に. 大きなマクロの場合は、小さな手順に分割することをお勧めします。

于 2013-02-18T07:32:23.180 に答える