vba检查一列中的每个单元格是否等于过滤后的变量

问题描述:

Sub test_calculateval() 
    Dim rnData, r As Range, ThisYearID, LR, FR, EndR, HomeCount, AwayCount, DrawCount, i As Long, Hometeam As String 
    ThisYearID = Sheet5.Cells(2, 1).Value - 1 
    Hometeam = Sheet5.Cells(2, 5) 
    HomeCount = 0 
    With Sheet1 
     Set rnData = Range(Range("A2"), Range("R2").End(xlDown)) 
     With rnData 
      Rows("1:1").Select 
      Selection.AutoFilter 
      ActiveSheet.Range(Range("A2"), Range("R2").End(xlDown)).AutoFilter Field:=1, Criteria1:=">" & ThisYearID - 5 
      ActiveSheet.Range(Range("A2"), Range("R2").End(xlDown)).AutoFilter Field:=5, Criteria1:=Hometeam 
      LR = Range("A" & Rows.count).End(xlUp).Row 
      Set r = ActiveSheet.Range("A2:R" & LR).Rows.SpecialCells(xlCellTypeVisible) 
      FR = r.Row 
      EndR = Range("A" & FR).End(xlDown).Row 
      For Each rngarea In .SpecialCells(xlCellTypeVisible).Areas 
       If Range("K2:K" & LR).SpecialCells(xlCellTypeVisible).Value = "H" Then 
        HomeCount = HomeCount + 1 
       End If 
      Next 
     End With 
    End With 
    MsgBox HomeCount 
End Sub 

我想检查列K(过滤后)中的每个单元格是否等于“H”,并对它们进行计数。 此代码是抛出一个类型不匹配错误,似乎是什么问题vba检查一列中的每个单元格是否等于过滤后的变量

+0

尝试调试,并找出哪些行代码导致类型不匹配的问题:

与这一个替换这个现有代码?大多数情况下,整数定义的变量正在分配一个字符串值,VBA不能隐式执行此转换。 – jainashish

+0

我认为这一个: 对于每个rngarea在.SpecialCells(xlCellTypeVisible).Areas 如果范围( “K2:K” & LR).SpecialCells(xlCellTypeVisible)。价值= “H”。然后 HomeCount = HomeCount + 1 完如果 – Chadi

因为它有可能

Range("K2:K" & LR).SpecialCells(xlCellTypeVisible).Value 

可能会返回多个细胞,所以它不能被比作一个单一字符串值。简而言之,当它们返回到一个范围时,我们无法计算多个单元格的值。该解决方案将第三个过滤器应用于过滤范围,该过滤范围过滤列K中所有具有值“H”的记录,然后对所有可见单元格进行计数。

这段代码会比通过循环做同样的事情要快。按F8

Sub test_calculateval() 
Dim rnData, r As Range, ThisYearID, LR, FR, EndR, HomeCount, AwayCount, DrawCount, i As Long, Hometeam As String 
ThisYearID = Sheet5.Cells(2, 1).Value - 1 
Hometeam = Sheet5.Cells(2, 5) 
HomeCount = 0 
With Sheet1 
    Set rnData = Range(Range("A2"), Range("R2").End(xlDown)) 
    With rnData 
     .AutoFilter 
     .AutoFilter Field:=1, Criteria1:=">" & ThisYearID - 5 
     .AutoFilter Field:=5, Criteria1:=Hometeam 
     .AutoFilter Field:=11, Criteria1:="=H", Operator:=xlAnd 
     HomeCount = .Columns("K2:K" & (rnData.Rows.Count)).SpecialCells(xlCellTypeVisible).Count-1 
    End With 
End With 
MsgBox HomeCount 

末次

+0

有效,但它会计算K列中的所有“H”,而不仅仅是应用过滤后的可见值。 – Chadi

+0

我修改了代码。请检查。 – jainashish