range.rows.count不会在循环上更新

时间:2017-10-13 17:59:39

标签: excel vba excel-vba loops

预期功能是:对于列表A中的每个项目,扫描列表B并识别匹配。将这些匹配添加到范围,如果匹配计数>>则输出该范围。 0.

这通过循环第一次完美,但在所有进一步的迭代中,当WorkRng正确添加(我可以将其输出到单元格并且它具有所有数据)时,WorkRng.Rows.Count保持为1。

Dim pasteRng as Range
Dim WorkRng as Range

For i = 2 To LastRow

Set WorkRng = Sheets("Output").Range("A1:G1")


    For j = 2 To outputCount
            If Worksheets("Output").Cells(j, 8).Value = Worksheets("Vendor List").Cells(i, 1).Value Then 'this line correctly identifies matches on subsequent loops
                Set pasteRng = Sheets("Output").Range("A" & j & ":G" & j) 
                Set WorkRng = Union(WorkRng, pasteRng) 'this line does not increase WorkRng.Rows.Count except on the first loop
            End If
    Next j



If WorkRng.Rows.Count > 1 Then

'do some stuff

End If


Set pasteRng = Nothing
Set WorkRng = Nothing

Next i

我很感激任何指导。

2 个答案:

答案 0 :(得分:1)

如果你跳过行,你最终得到一个多区域(非连续)范围,所以默认情况下Rows.Count只返回第一个区域中的行数(即1)

在“立即”窗格中:

? Range("$A$1:$C$1,$A$3:$C$3").Rows.Count
>> 1

你可以更新你的If检查:

If WorkRng.Cells.Count > 6 Or  Then

'do some stuff

End If

答案 1 :(得分:0)

您可以使用此通用函数来计数任意范围(连续和非连续)中的行:

Function GetRowsCount&(rng As Range)
    Dim rngArea As Range
    For Each rngArea In rng.Areas
        GetRowsCount = GetRowsCount + rngArea.Rows.Count
    Next
End Function