Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CountIf mit Array

Forumthread: CountIf mit Array

CountIf mit Array
13.11.2007 15:57:22
Thomas
Hallo Excelperten,
ich möchte ein Feld durchsuchen, ob darin ein bestimmter Wert vorhanden ist. Dies möchte ich aber nicht Feld für Feld, sondern mit der Excel-Funktion "CountIf" erledigen:

Sub C()
Dim a(10)
a(0) = "Hallo"
If Application.WorksheetFunction.CountIf(a, "Hallo") > 0 Then MsgBox "Wert vorhanden!"
End Sub


Leider habe ich beim Compilieren immer nur Fehlermeldungen, dass der Parameter "a" bei CountIf nicht akzeptiert wird.
Weiß jemand warum nicht? Oder gibt es eine andere Lösung?
Vielen Dank schon mal im voraus!
Thomas

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CountIf mit Array
13.11.2007 16:16:39
Peter
Hallo Thomas,
ich fürchte CountIf kann nicht in Array suchen
so, mit einem Zwischenbereich, könnte es gehen:

Sub C()
Dim a(10)
a(0) = "Hallo"
Range(Cells(1, 255), Cells(11, 255)) = a
If Application.WorksheetFunction.CountIf(Range(Cells(1, 255), Cells(11, 255)), "Hallo") > 0  _
Then MsgBox "Wert vorhanden!"
End Sub


Gruß Peter

Anzeige
AW: CountIf mit Array
13.11.2007 16:23:24
Peter
Hallo Thomas,
noch einmal, etwas variabler:

Sub C()
Dim a(10)
a(0) = "Hallo"
Range("IV1") = a
If Application.WorksheetFunction.CountIf(Range(Cells(1, 256), Cells(UBound(a), 256)), _
"Hallo") > 0 Then MsgBox "Wert vorhanden!"
End Sub


Gruß Peter

Anzeige
AW: CountIf mit Array
13.11.2007 17:04:00
Thomas
Hallo Peter,
danke für deine Antwort.
So habe das auch schon gehabt, aber ich möchte eben ohne den Umweg über das Blatt gehen, weil ich mir denke, dass ich in VB schneller bin (was zu beweisen wäre).
In anderen Foren habe ich aber inzwischen "rausgehört", dass das eben so nicht geht. Es bleibt mir wohl nur übrig, Feld für Feld durchzugehen.
Danke nochmals,
Thomas

Anzeige
AW: CountIf mit Array
13.11.2007 17:07:33
Jan
Hi,
verwende Application.Match statt Countif.
mfg Jan

AW: CountIf mit Array
14.11.2007 00:39:12
Daniel
Hi Jan
könnte man machen, wobei du darauf hinweisen solltest, daß die Match-Funktion einen FEHLER erzeugt, wenn der Suchwert nicht vorhanden ist!
Wie muß man darauf reagieren?
Countif liefert in diesem Fall den Wert 0 und benötigt so keine Fehlerbehandlung.
Gruß, Daniel
Anzeige
;
Anzeige

Infobox / Tutorial

CountIf mit Array in Excel VBA nutzen


Schritt-für-Schritt-Anleitung

Um die Funktion CountIf in Excel VBA mit einem Array zu verwenden, gibt es einige wichtige Punkte zu beachten. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erstelle ein Array: Definiere ein Array in deiner Subroutine.

    Dim a(10)
    a(0) = "Hallo"
  2. Verwende Application.WorksheetFunction.CountIf: Beachte, dass CountIf nicht direkt mit Arrays funktioniert. Stattdessen kannst du Application.WorksheetFunction.CountIf verwenden, um auf Bereiche zuzugreifen.

  3. Übertrage das Array in einen Bereich: Um die Funktionalität zu nutzen, musst du das Array in einen Bereich auf dem Arbeitsblatt übertragen. Zum Beispiel:

    Range(Cells(1, 255), Cells(11, 255)) = a
  4. Zähle die Werte: Jetzt kannst du den Zähler aktivieren:

    If Application.WorksheetFunction.CountIf(Range(Cells(1, 255), Cells(11, 255)), "Hallo") > 0 Then
       MsgBox "Wert vorhanden!"
    End If

Häufige Fehler und Lösungen

  • Fehler: Parameter nicht akzeptiert
    Wenn du versuchst, CountIf direkt mit einem Array zu verwenden, erhältst du eine Fehlermeldung. Stelle sicher, dass du das Array zuerst in einen Bereich überträgst.

  • Fehlerbehandlung
    Wenn du Application.Match anstelle von CountIf verwendest, kann ein Fehler auftreten, wenn der Suchwert nicht vorhanden ist. Achte darauf, dies entsprechend zu behandeln.


Alternative Methoden

  1. Verwendung von Application.Match:
    Du kannst die Match-Funktion verwenden, um nach einem Wert im Array zu suchen. Beachte jedoch, dass dies einen Fehler auslöst, wenn der Wert nicht vorhanden ist.

    Dim result As Variant
    result = Application.Match("Hallo", a, 0)
    If Not IsError(result) Then
       MsgBox "Wert vorhanden!"
    End If
  2. Direkte Schleifen durch das Array:
    Eine weitere Möglichkeit ist, das Array manuell zu durchsuchen:

    Dim found As Boolean
    found = False
    For i = LBound(a) To UBound(a)
       If a(i) = "Hallo" Then
           found = True
           Exit For
       End If
    Next i
    If found Then MsgBox "Wert vorhanden!"

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du CountIf in Verbindung mit Arrays nutzen kannst.

Beispiel 1: Grundlegende Verwendung von CountIf

Sub BeispielCountIf()
    Dim a(10) As String
    a(0) = "Hallo"
    Range("A1:A11") = a
    If Application.WorksheetFunction.CountIf(Range("A1:A11"), "Hallo") > 0 Then
        MsgBox "Wert vorhanden!"
    End If
End Sub

Beispiel 2: Verwendung von Match

Sub BeispielMatch()
    Dim a(10) As String
    a(0) = "Hallo"
    Dim result As Variant
    result = Application.Match("Hallo", a, 0)
    If Not IsError(result) Then
        MsgBox "Wert vorhanden!"
    End If
End Sub

Tipps für Profis

  • Performance verbessern: Wenn du mit großen Datenmengen arbeitest, überlege dir, ob du die Verwendung von Arrays und Schleifen in VBA bevorzugen solltest, da dies effizienter sein kann als die Nutzung von Excel-Funktionen.

  • Fehlerbehandlung: Bei der Verwendung von Match achte darauf, eine Fehlerbehandlung einzubauen, um unerwartete Ergebnisse zu vermeiden.

  • VBA Funktionen: Du kannst auch eigene Funktionen erstellen, um die Suche innerhalb von Arrays zu optimieren.


FAQ: Häufige Fragen

1. Warum kann ich CountIf nicht direkt mit einem Array verwenden?
CountIf ist nicht dafür konzipiert, direkt mit Arrays zu arbeiten. Du musst das Array zuerst in einen Bereich auf einem Arbeitsblatt übertragen.

2. Was passiert, wenn der Suchwert nicht vorhanden ist?
Bei der Verwendung von CountIf erhältst du 0 zurück, während Match einen Fehler auslöst. Stelle sicher, dass du entsprechend damit umgehst.

3. Gibt es eine einfachere Methode, um einen Wert in einem Array zu zählen?
Ja, du kannst eine eigene Funktion schreiben, die durch das Array iteriert und den Zähler erhöht, wenn der Wert gefunden wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige