好的,
希望这不是太复杂。我试图根据客户ID号过滤大量交易。我有一份大约60位重要客户的清单,我需要在另一张表中跟踪。它有他们的客户ID号,然后是他们的名字和其他数据。因此,我每天需要处理大约20,000笔交易并手动过滤。然后进行复制并将当天每笔交易的第一个实例粘贴到另一张纸上。
到目前为止,这就是我所拥有的:
Dim Arr() AS Variant
Arr = Sheet2.range(“A1:A60”)
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
ActiveSheet.Range(“A1:A” & LastRow).AutoFilter Field:=1,_
Criterial:=Arr, Operator:=xlFilterValues
Dim r As Long, endRow As Long, pasteRowIndex As Long
pasteRowIndex = 1
For r = 1 To LastRow
If Cells(r, Columns("A").Column).Value <> Cells(r + 1, Columns("A").Column).Value
Then Rows(r).Select
Selection.Copy
Sheets("Sheet3").Select
Rows(pasteRowIndex).Select
ActiveSheet.Paste
pasteRowIndex = pasteRowIndex + 1
Sheets("Sheet1").Select
End If
Next r
截至目前,由于我正在度假,所以未经考验。这段代码看起来合适吗?如果没有,我能做得更好吗?
由于
答案 0 :(得分:0)
一些注意事项:
将Columns("A").Column
更改为1,因为您没有检查其他列,所以不需要这样做。
对于LastRow
,可能更容易使用Cells(1,1).End(xlDown).Row
从我所看到的if
命令检查后面的单元格是否有相同的ID号。这意味着该ID号的最后一笔交易是唯一被传递的交易。如果你的标题是第一行,那么你可以使用
If Cells(r, Columns("A").Column).Value <> Cells(r - 1 1, Columns("A").Column).Value
以r = 2
此外,您似乎在过滤时只过滤A列。更改为以下内容,它应该可以正常工作
LastCol = Cells(1,1).End(xlToRight).Column
ActiveSheet.Range(Cells(1,1),Cells(LastRow,LastCol)).AutoFilter Field:=1,_
Criterial:=Arr, Operator:=xlFilterValues
为了简化代码,您还可以使用Dim r, endRow, pasteRowIndex As Long
,如果您决定使用Dim LastRow as Integer
,请不要忘记定义LastCol
和{{1}}的相似内容。
如果您返回时仍有任何问题,请随时告诉我。