在单独的工作表中基于多个单元格值进行过滤,然后循环结果

时间:2014-06-20 02:49:58

标签: excel vba excel-vba

好的,

希望这不是太复杂。我试图根据客户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 

截至目前,由于我正在度假,所以未经考验。这段代码看起来合适吗?如果没有,我能做得更好吗?

由于

1 个答案:

答案 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}}的相似内容。

如果您返回时仍有任何问题,请随时告诉我。