我有一个相当简单的语法问题:
我正在尝试将n行从一个excel文件复制并粘贴到另一个excel文件中。另外,我想将复制的总行存储到变量中。 有人能帮助我做到这一点吗?
例如:
1)
Activate CSV file
Apply Filter to Column B (Page Title) & uncheck "blanks" ("<>") filter**
Windows("Test_Origin.xlsm").Activate
ActiveSheet.Range("$A$1:$J$206").AutoFilter Field:=2, Criteria1:="<>"
2)
Copy Filtered Lines with data (Excluding Row 1)
Range("B2:F189").Select
Selection.Copy
copiedRowTotal = total *FILTERED* rows copied over from original sheet, then Test Number iterates that many times
copiedRowTotal = Selection.Rows.Count
MsgBox copiedRowTotal
谢谢
答案 0 :(得分:2)
间接的方法是
Range("B2:F189").Copy
Range("M2").PasteSpecial xlPasteValues
copiedRowTotal = Selection.Rows.Count
Selection.Clear
代码复制范围&amp;在一个单独的位置进行粘贴特殊操作
通过这样做,仅将过滤的行复制到M2&amp;当PasteSpecial
操作完成时,该区域(粘贴过滤行的位置)会突出显示。
执行Selection.Rows.Count
会给出一个,即已粘贴的已过滤行数
在确定过滤行数后,将清除选择。
答案 1 :(得分:1)
我不相信有办法直接获得可见的细胞计数。我尝试使用'SpecialCells(xlSpecialCellsVisible)'函数,但是在应用过滤器时无法获得正确的计数。这是我编写的一个快速函数,可以应用过滤器。
另请注意,有时过滤器有时会弄乱选定的范围,因此需要注意。
Public Sub TestIt()
Dim visibleCount As Long
visibleCount = GetVisibleCount(Sheets(1).Range("A2:H3000"))
MsgBox visibleCount
End Sub
Public Function GetVisibleCount(rng As Range) As Long
Dim loopRow As Range
GetVisibleCount = 0
For Each loopRow In rng.Rows
If loopRow.Hidden = False Then
GetVisibleCount = GetVisibleCount + 1
End If
Next loopRow
End Function
答案 2 :(得分:0)
copiedrowtotal = selection.rows.count ' its not selection.totalcells
我认为这可以解决问题
看到您的更新后,让我告诉您这些可能会起作用
dim i as long
i = Application.WorksheetFunction.Subtotal(2,worksheets("Sheet").Range("B2:F189"))
现在我有过滤行数!如果你在你的范围内包含了标题,那么在结尾处做-1,否则就把它留下来
argument 2 in subtotal is => counting the rows and then sheet name
and then specify range to count filtered rows
相反,如果您为许多列应用过滤器,我只会选择一列! 希望它有助于别忘了接受答案! :