VBA:在循环中复制一个区域(逐行),并将其(逐行)插入到新工作表中(循环+if语句)



在VBA中,我尝试使用if语句运行循环。循环被设置为在一个范围内一次运行一行(wks"Data",B7:J25(。

对于每一行,如果C7:C25列的值为1,我想复制该行(例如B7:J7(,并将其插入工作表"temp"中,每次一个。

我尝试过各种代码,例如:

Sub start()
Dim i As Integer
Dim wsData, wsCalcAndOutput, wsTemp As Worksheet
For i = 1 To 25
If Cells((7 + i), 3) = "1" Then
Worksheets("Data").Range("B7:J7").Copy _
Worksheets("temp").Range("B7:J7")
End If
Next
End Sub

但是我只能复制并粘贴范围的第一行。或者,我在stackoverflow找到了这个过程,但我似乎无法粘贴每次迭代时复制的内容:

将wsData、wsCalcAndOutput标注为工作表Dim rSPX、rSX5E、rNKY、rUKX、rSMI、rEMUP、testData As Range

Sub start()
Dim i As Integer
For i = 1 To 25
If Cells((7 + i), 3) = "1" Then
With ActiveSheet
.Range(.Cells((7 + i), 2), .Cells((7 + i), 10)).Copy
End With
End If
Next
End Sub

这是正确的方法吗?还是有更有效的方法?

此外,在数据集中,if语句的条件实际上是一个名为"TRUE"或"FALSE"的字符串。if语句是否可以使用字符串而不是"1"作为信号?

祝你一切顺利,Christoffer

正如BigBen所说,使用AutoFilter会更快,但这里有一种使用循环的方法。我添加了一些评论,希望能解释基本原理。

代码的一个问题是,您没有更改目标单元格,因此它们将不断被覆盖。

Sub start()
Dim i As Long 'better than integer
Dim n As Long: n = 7
Dim wsData As Worksheet, wsCalcAndOutput As Worksheet, wsTemp As Worksheet 'specify each type
With Worksheets("Data")
For i = 7 To 25 'change as appropriate
If .Cells(i, 3) = 1 Then 'no need for quotes
Range(.Cells(i, "B"), Cells(i, "J")).Copy _
Worksheets("temp").Cells(n, "B") 'start at row 7?
n = n + 1 'update so that we don't overwrite next time
End If
Next
End With
End Sub

最新更新