VBA 循环复制和粘贴
VBA COPY AND PASTE IN A LOOP
我是 VBA 的新手,需要一些帮助来解决这个问题。
我有 8 列,每列有 9 行。我想复制每一列并将其粘贴到特定范围内的另一个 sheet。
如何编写以下语句? "Go to sheet2 and copy the first column and 2-9 rows and paste it to sheet1 in the range("C3:C10") 然后按 solver 做一些其他工作人员,当所有这些都完成后转到下一栏并再次执行相同操作"。
我找到了如何为一列执行此操作,但我找不到如何执行循环。
这是我为第一列编写的代码。
我想对所有 8 列都执行相同的操作。
Sub test1()
Worksheets("sheet 1").Range("c3:c10").Value = Worksheets("Sheet 2").Range("A2:A9").Value
Worksheets("Sheet 1").Range("C17").Value = "Y"
Worksheets("Sheet 1").Range("C32").Value = "Y"
SolverOk SetCell:="$E", MaxMinVal:=3, ValueOf:=Range("C104").Value,
ByChange:="$C0", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
Worksheets("Sheet 3").Range("J2").Value = Worksheets("Sheet 1").Range("L24").Value
End Sub
我不使用 Range(""),而是使用 .Cells(row, col) 在列之间循环,例如:
Sub Iteration()
For c = 1 To 9
Sheets("Sheet1").Cells(1, c).EntireColumn.Copy
Sheets("Sheet2").Cells(1, c).PasteSpecial
Next
End Sub
此代码通过遍历 "Cells" 第二个参数,将第 1 列和第 9 列之间的每一行从 Sheet1 复制到 Sheet2,该参数引用了一个列。
而代码之所以能做到这一点,是因为 "For" 循环不断重复,直到达到条件。在我的示例中,我将 "c" 设置为 1,并要求重复 "For - Next" 语句中的代码,直到 c 达到 9,默认情况下将变量加 1。
你可以这样做。如果其他东西是可变的,也许可以使用 i
进行类似的调整。
Sub test1()
Dim i As Long
For i = 1 To 8
Worksheets("sheet 1").Range("c3:c10").Value = Worksheets("Sheet 2").Range("A2:A9").Offset(, i - 1).Value
Worksheets("Sheet 1").Range("C17").Value = "Y"
Worksheets("Sheet 1").Range("C32").Value = "Y"
SolverOk SetCell:="$E", MaxMinVal:=3, ValueOf:=Range("C104").Value, _
ByChange:="$C0", Engine:=1, EngineDesc:="GRG Nonlinear"
solverSolve True
Worksheets("Sheet 3").Range("J2").Value = Worksheets("Sheet 1").Range("L24").Value
Next i
End Sub
我是 VBA 的新手,需要一些帮助来解决这个问题。
我有 8 列,每列有 9 行。我想复制每一列并将其粘贴到特定范围内的另一个 sheet。
如何编写以下语句? "Go to sheet2 and copy the first column and 2-9 rows and paste it to sheet1 in the range("C3:C10") 然后按 solver 做一些其他工作人员,当所有这些都完成后转到下一栏并再次执行相同操作"。
我找到了如何为一列执行此操作,但我找不到如何执行循环。 这是我为第一列编写的代码。 我想对所有 8 列都执行相同的操作。
Sub test1()
Worksheets("sheet 1").Range("c3:c10").Value = Worksheets("Sheet 2").Range("A2:A9").Value
Worksheets("Sheet 1").Range("C17").Value = "Y"
Worksheets("Sheet 1").Range("C32").Value = "Y"
SolverOk SetCell:="$E", MaxMinVal:=3, ValueOf:=Range("C104").Value,
ByChange:="$C0", _
Engine:=1, EngineDesc:="GRG Nonlinear"
SolverSolve True
Worksheets("Sheet 3").Range("J2").Value = Worksheets("Sheet 1").Range("L24").Value
End Sub
我不使用 Range(""),而是使用 .Cells(row, col) 在列之间循环,例如:
Sub Iteration()
For c = 1 To 9
Sheets("Sheet1").Cells(1, c).EntireColumn.Copy
Sheets("Sheet2").Cells(1, c).PasteSpecial
Next
End Sub
此代码通过遍历 "Cells" 第二个参数,将第 1 列和第 9 列之间的每一行从 Sheet1 复制到 Sheet2,该参数引用了一个列。
而代码之所以能做到这一点,是因为 "For" 循环不断重复,直到达到条件。在我的示例中,我将 "c" 设置为 1,并要求重复 "For - Next" 语句中的代码,直到 c 达到 9,默认情况下将变量加 1。
你可以这样做。如果其他东西是可变的,也许可以使用 i
进行类似的调整。
Sub test1()
Dim i As Long
For i = 1 To 8
Worksheets("sheet 1").Range("c3:c10").Value = Worksheets("Sheet 2").Range("A2:A9").Offset(, i - 1).Value
Worksheets("Sheet 1").Range("C17").Value = "Y"
Worksheets("Sheet 1").Range("C32").Value = "Y"
SolverOk SetCell:="$E", MaxMinVal:=3, ValueOf:=Range("C104").Value, _
ByChange:="$C0", Engine:=1, EngineDesc:="GRG Nonlinear"
solverSolve True
Worksheets("Sheet 3").Range("J2").Value = Worksheets("Sheet 1").Range("L24").Value
Next i
End Sub