2017-10-08 49 views
0
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

回答

0

因爲它有可能

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

相關問題