Getting a total copied set of rows in VBA and storing it in a variable

拥有回忆 提交于 2020-01-06 10:55:25

问题


I have a fairly simple syntax question:

I'm trying to copy and paste n rows from one excel file to another. In addition, I'd like to store the total copied rows into a variable. Can someone help me accomplish this?

For example:

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

Thanks


回答1:


An indirect way to do this is

Range("B2:F189").Copy
Range("M2").PasteSpecial xlPasteValues
copiedRowTotal = Selection.Rows.Count
Selection.Clear

The code copies the range & does a paste special operation on a separate location.
By doing this, only filtered rows are copied to M2 & the area (where the filtered rows are pasted) is highlighted when PasteSpecial operation is done.

Doing a Selection.Rows.Count gives one, the number of filtered rows that were pasted.
After figuring out the number of filtered rows, the selection is cleared up.




回答2:


I don't believe there is a way to get the visible cell count directly. I tried using the 'SpecialCells(xlSpecialCellsVisible)' function, but could not get the correct count with a filter applied. Here is a quick function I wrote that works with a filter applied.

Also be aware that sometimes a filter can mess with the selected range at times, so it's something to note.

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



回答3:


copiedrowtotal = selection.rows.count ' its not selection.totalcells

I think this would do the trick

After seeing your update let me tell you probably these would work

dim i as long
i = Application.WorksheetFunction.Subtotal(2,worksheets("Sheet").Range("B2:F189"))

Now i has the number of filtered rows in it! If you have included header in your range then do -1 at the end else just leave it up

argument 2 in subtotal is => counting the rows and then sheet name 
and then specify range to count filtered rows

instead I would select only one column if you applied filter for many columns! Hope it helps dont forget to accept an answer ! :



来源:https://stackoverflow.com/questions/7420657/getting-a-total-copied-set-of-rows-in-vba-and-storing-it-in-a-variable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!