2017-07-18 1 views
1

Ich möchte die Anzahl der Zellen in einer Spalte finden, die den Wert "Orange" unter "Old Value" Header hat. Aber ich bekomme den Wert als 0 obwohl ich Werte in den Zellen habe. Bitte helfen Sie mit dem folgenden Code.CountIf Rückgabe 0 Wert

Private Sub CommandButton1_Click() 

    Dim x As Workbook 

    Dim Wks As Worksheet 

    Dim aCell As Range 

    Dim col As Long 

    Dim Var1 

    Dim i As Integer 

    Dim a 

    Set x = Workbooks.Open("C:\*********\file.xls") 

    Set Wks = x.Worksheets("file") 

     Set aCell = Wks.Range("A1:X1000").Find(What:="Old Value", LookIn:=xlValues, LookAt:=xlWhole, _ 
        MatchCase:=False, SearchFormat:=False) 
      col = aCell.Column 

     For i = 1 To 1000 
      Var1 = Application.WorksheetFunction.CountIf(Wks.Cells(i, col), "*orange*") 

      Next i 
      MsgBox Var1 


End Sub 

Antwort

1

Im Allgemeinen ist dies ein gutes Beispiel für eine Frage, die wirklich minimal gemacht werden kann. Das Problem liegt in der Schleife, nicht im Rest des Codes.

Sie erhöhen den Wert var1 nicht. Daher wird es jedes Mal neu geschrieben. So erhöhen Sie den Wert:

Public Sub Test() 

    Dim Var1 as Long 
    Dim i As Long 

    For i = 1 To 1000 
     Var1 = Var1 + WorksheetFunction.CountIf(ActiveSheet.Cells(i, 4), "*orange*") 
    Next i 

    Debug.Print Var1 

End Sub 

Das Ergebnis wird im unmittelbaren Fenster gedruckt.

2

For Schleife wird hier nicht benötigt. Statt

For i = 1 To 1000 
    Var1 = Application.WorksheetFunction.CountIf(Wks.Cells(i, col), "*orange*") 
Next i 

versuchen

Var1 = Application.WorksheetFunction.CountIf(Wks.Columns(col), "*orange*")