我想在几个条件下将数据从一张表复制到另一张表: 1.从第1行和第1列开始,如果R1 C2不为空则匹配,然后复制R1 C1和R1 C2对并粘贴到另一个工作表中作为新行。 增加列的计数器并将R1 C1与R1 C3匹配,依此类推。 当列计数器达到10时递增Row。
我尝试了以下代码,但是编译错误为Sub或函数未定义。
请帮忙。
Private Sub CommandButton1_Click()
Dim x As Integer
Dim y As Integer
x = 2
y = 2
Do While Cells(x, 1) <> ""
If Cells(x, y) <> "" Then
Worksheets("Sheet1").Cells(x, 2).Copy
Worksheets("Sheet2").Activate
erow = Sheet2.Cells(Rows.Count, 1).End(xlUp) > Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets("Sheet2").Rows(erow)
End If
Worksheets("Sheet1").Activate
y = y + 1
If y = 10 Then x = x + 1
End If
Loop
End Sub
答案 0 :(得分:1)
由于>
Sheet2.Cells(Rows.Count, 1).End(xlUp) > Offset(1, 0).Row
,您提出错误
在处理行时,请避免使用Integer
。发布excel2007
后,行数增加,Integer
可能无法处理行号。
避免使用.Activate
。
这是你在尝试什么? (的未测试强>)
注意:我正在演示,因此我正在直接使用excel单元格。但实际上,我会使用autofilter&amp;数组来执行此操作。
Private Sub CommandButton1_Click()
Dim wsInput As Worksheet, wsOutput As Worksheet
Dim lRowInput As Long, lRowOutput As Long
Dim i As Long, j As Long
Set wsInput = ThisWorkbook.Worksheets("Sheet1")
Set wsOutput = ThisWorkbook.Worksheets("Sheet2")
With wsInput
lRowInput = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To lRowInput
If .Cells(i, 2).Value <> "" Then
For j = 3 To 10
lRowOutput = wsOutput.Range("A" & wsOutput.Rows.Count).End(xlUp).Row + 1
.Range(.Range(.Cells(i, 1), .Cells(i, 1)).Address & _
"," & _
.Range(.Cells(i, j), .Cells(i, j)).Address).Copy _
wsOutput.Range("A" & lRowOutput)
Next j
End If
Next i
End With
End Sub