VBA按帐号排序,然后选择活动单元格,剪切并粘贴到下一页
因此,我录制了一个宏,使标题行过滤器,然后在B列帐户中排序,选择一个特定的帐户编号,然后剪切所有减去标题行的单元格,当然,并将其粘贴到第2页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
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,它不在那里,因为它不在那里,我得到一个错误。我插入的代码是什么,如果它找不到该帐号,就直接转到下一个可用帐号?这就像是一个错误的恢复下?