在VBA中获取完整的复制行集并将其存储在变量中

时间:2011-09-14 17:44:52

标签: vba excel-vba excel

我有一个相当简单的语法问题:

我正在尝试将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

谢谢

3 个答案:

答案 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

相反,如果您为许多列应用过滤器,我只会选择一列! 希望它有助于别忘了接受答案! :