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检查一列中的每个单元格是否等于过滤后的变量
答
因为它有可能
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
尝试调试,并找出哪些行代码导致类型不匹配的问题:
与这一个替换这个现有代码?大多数情况下,整数定义的变量正在分配一个字符串值,VBA不能隐式执行此转换。 – jainashish
我认为这一个: 对于每个rngarea在.SpecialCells(xlCellTypeVisible).Areas 如果范围( “K2:K” & LR).SpecialCells(xlCellTypeVisible)。价值= “H”。然后 HomeCount = HomeCount + 1 完如果 – Chadi