VBA按帐号排序,然后选择活动单元格,剪切并粘贴到下一页

VBA按帐号排序,然后选择活动单元格,剪切并粘贴到下一页,vba,excel,Vba,Excel,因此,我录制了一个宏,使标题行过滤器,然后在B列帐户中排序,选择一个特定的帐户编号,然后剪切所有减去标题行的单元格,当然,并将其粘贴到第2页 Sub Macro1() ' ' Macro1 Macro ' ' ActiveSheet.Range("$A$1:$O$1923").AutoFilter Field:=2, Criteria1:= _ "905263043" Rows("180:180").Select ActiveWindow.ScrollR

因此,我录制了一个宏,使标题行过滤器,然后在B列帐户中排序,选择一个特定的帐户编号,然后剪切所有减去标题行的单元格,当然,并将其粘贴到第2页

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveSheet.Range("$A$1:$O$1923").AutoFilter Field:=2, Criteria1:= _
        "905263043"
    Rows("180:180").Select
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 184
    ActiveWindow.ScrollRow = 202
    ActiveWindow.ScrollRow = 217
    ActiveWindow.ScrollRow = 234
    ActiveWindow.ScrollRow = 249
    ActiveWindow.ScrollRow = 266
    ActiveWindow.ScrollRow = 284
    ActiveWindow.ScrollRow = 301
    ActiveWindow.ScrollRow = 316
    ActiveWindow.ScrollRow = 333
    ActiveWindow.ScrollRow = 345
    ActiveWindow.ScrollRow = 363
    ActiveWindow.ScrollRow = 380
    ActiveWindow.ScrollRow = 400
    ActiveWindow.ScrollRow = 425
    ActiveWindow.ScrollRow = 447
    ActiveWindow.ScrollRow = 477
    ActiveWindow.ScrollRow = 531
    ActiveWindow.ScrollRow = 559
    ActiveWindow.ScrollRow = 606
    ActiveWindow.ScrollRow = 663
    ActiveWindow.ScrollRow = 725
    ActiveWindow.ScrollRow = 757
    ActiveWindow.ScrollRow = 821
    ActiveWindow.ScrollRow = 854
    ActiveWindow.ScrollRow = 925
    ActiveWindow.ScrollRow = 992
    ActiveWindow.ScrollRow = 1084
    ActiveWindow.ScrollRow = 1166
    ActiveWindow.ScrollRow = 1218
    ActiveWindow.ScrollRow = 1262
    ActiveWindow.ScrollRow = 1300
    ActiveWindow.ScrollRow = 1342
    ActiveWindow.ScrollRow = 1357
    ActiveWindow.ScrollRow = 1362
    ActiveWindow.ScrollRow = 1367
    ActiveWindow.ScrollRow = 1369
    Rows("180:1407").Select
    Selection.Cut
    Sheets("Sheet2").Select
    Range("A2").Select
    ActiveSheet.Paste
End Sub
问题是我每周都做这个报告,由于付款或账单的原因,账户会随着行的不同而变化。所以下一次不会是从第180行到第1407行

那么,我如何编写一个通用VBA来选择过滤器排序的所有活动单元格,减去HeaderRow、cut和paste到表2中

我想搞点像这样的事

Dim rng As Range

Set rng = ActiveSheet.UsedRange

    ActiveSheet.Range("A:O").AutoFilter Field:=2, Criteria1:= _
        "905263043"
    Set rng = rng.Offset(1).Resize(rng.Rows.Count - 1)

    rng.Select
    Selection.Cut

但是那不起作用

这应该起作用。假定第1列中有标题

Dim ws as Worksheet 
Set ws = Worksheets("Sheet1") 'change as needed

With ws

    .UsedRange.AutoFilter Field:=2, Criteria1:="905263043"

    Dim rng as Range
    Set rng = Intersect(.UsedRange,.UsedRange.Offset(1)).SpecialCells(xlCellTypeVisible)

    rng.Copy Worksheets("Sheet2").Range("A2")
    rng.EntireRow.Delete

    .UsedRange.AutoFilter

End With

是的,我应该先说。当它选择帐号时,在第181行到第1084行之间会有其他帐号隐藏在过滤器中,因此,就像其他人说的那样,是非连续的。我尝试了它,并突出显示了集合ws=worksheetsheetsheet1中的单词Worksheet,但出现编译错误:sub或function not definedNevermind,我只需要在工作表中添加一个s,谢谢!很高兴它起作用了。我在回答中也加了s。把标记看作是答案,让其他人受益。我还有一个问题。我对多个帐户使用此代码,因此,例如,我将有905263043、905706748、90523402。。。。等等但有时这些账户会从报告中消失,因为他们已经支付了所有费用,所以他们的账户余额为0,并且没有显示在报告中。所以这个宏仍然会查找例如905706748,它不在那里,因为它不在那里,我得到一个错误。我插入的代码是什么,如果它找不到该帐号,就直接转到下一个可用帐号?这就像是一个错误的恢复下?