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

zählenwenn in VBA-Array

Forumthread: zählenwenn in VBA-Array

zählenwenn in VBA-Array
14.10.2008 09:14:00
David
Hallo zusammen.
folgendes Makro:

Sub finden()
Dim P(12), C(9)
P(1) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "A1", "A2", "A3")
... (das packe ich später noch in eine Schleife)
P(12) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "B1", "B2", "B3")
C(1) = Application.WorksheetFunction.CountIf(P(), "A1")
End Sub


Ich möchte in dem Array P() zählen, wie oft der Wert A1 vorhanden ist. So wie ich das momentan mache, bekomme ich die Fehlermeldung "Typen unverträglich". Wie geht es richtig?
Danke und Gruß
David

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zählenwenn in VBA-Array
14.10.2008 09:17:00
Rudi
Hallo,
C(1) = Application.CountIf(P, "A1")
Gruß
Rudi
AW: zählenwenn in VBA-Array
14.10.2008 09:31:22
David
Hallo Rudi,
danke erst mal für die wie immer super schnelle Antwort.
Die Zeile läuft zwar jetzt ohne Fehler durch, aber die Variable C(1) hat anschließen keinen Wert. Wenn ich mit Msgbox C(3) einen Test mache, kommt wieder "Typen unverträglich"
Das Überwachungsfenster bringt folgendes:
Userbild
Hier mal noch der Vollständigkeit halber das ganze Makro:

Sub finden()
Dim i, counter
Dim P(12)
Dim C(9) 'As Boolean
For i = 1 To 6
P(i) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "A1", "A2", "A3")
P(i * 2) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "B1", "B2", "B3")
Next
C(1) = P(1)  P(3)
C(2) = P(2)  P(4)
C(3) = Application.CountIf(P, "A1")
'C(3) = Application.CountIf(P, "A1") 


Irgendwo ist da noch der Wurm drin.
Gruß
David

Anzeige
AW: zählenwenn in VBA-Array
14.10.2008 10:59:54
Rudi
Hallo,

Sub finden()
Dim i, counter
Dim P(12)
Dim C(9) 'As Boolean
For i = 1 To 12 Step 2
P(i) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "A1", "A2", "A3")
P(i + 1) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "B1", "B2", "B3")
Next
C(1) = P(1)  P(3)
C(2) = P(2)  P(4)
For i = 1 To 12
C(3) = C(3) - (P(i) = "A1")
Next i
C(3) = C(3) 


Gruß
Rudi

Anzeige
AW: zählenwenn in VBA-Array
14.10.2008 11:04:00
David
Hallo Rudi,
Schade, ich dachte, es geht einfacher als mit der Schleife (an die ich auch schon gedacht habe).
Da diese Prüfung noch für 5 weitere Werte erfolgen muss, habe ich mir eine Variante mit Select Case gebastelt, bei der eine weitere Variable hochgezählt wird. Ich denke, das ist dann noch halbwegs übersichtlich.

For i = 1 To 12
Select Case P(i)
Case "A1"
check(1) = check(1) + 1
Case "A2"
check(2) = check(2) + 1
Case "A3"
check(3) = check(3) + 1
Case "B1"
check(4) = check(4) + 1
Case "B2"
check(5) = check(5) + 1
Case "B3"
check(6) = check(6) + 1
End Select
Next


Danke für deine Hilfe.
Gruß
David

Anzeige
...noch offen...
14.10.2008 09:40:33
David
AW: Filterfunktion
14.10.2008 19:22:00
Gerd
Hallo David,
nur bei eindimensionalen Datenfeldern.
Msgbox 1 + Ubound(Filter(P,"A1",True,1))
Gruß Gerd
AW: Filterfunktion
14.10.2008 22:26:00
Daniel
Hi
die FILTER-Funktion kannte ich bisher noch nicht, man lernt hier immer noch was dazu.
@David
ob du in einer Worksheetfunction ein Array verwenden kannst, hängt davon ab, was die entsprechende Excelfunktion erfordert.
bei ZÄHLENWENN ist das ein Zellbereich, daher kannst du hier auch kein Array verwenden.
die Zählschleife ist zwar etwas aufwendiger, aber Excel ist beim Verarbeiten von Arrays idR sehr schnell, so daß auch bei grösseren Arrays ne Schleife auch nicht länger dauert als wenn du mit ner Worksheet-Function arbeiten würdest.
Von daher kann man das Problemlos verwenden.
Gruß, Daniel
Anzeige
;
Anzeige

Infobox / Tutorial

Zählen mit VBA in einem Array


Schritt-für-Schritt-Anleitung

Um die ZÄHLENWENN-Funktion in einem VBA-Array zu verwenden, kannst du folgendes Makro verwenden. Hier zeige ich dir, wie du ein einfaches Makro schreibst, das die Anzahl eines bestimmten Wertes in einem Array zählt.

Sub finden()
    Dim i As Integer
    Dim P(12) As String
    Dim C(9) As Integer

    ' Array P mit zufälligen Werten füllen
    For i = 1 To 12 Step 2
        P(i) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "A1", "A2", "A3")
        P(i + 1) = Application.WorksheetFunction.Choose(Int(Rnd() * 3) + 1, "B1", "B2", "B3")
    Next i

    ' Zählen, wie oft "A1" in P vorkommt
    For i = 1 To 12
        If P(i) = "A1" Then
            C(1) = C(1) + 1
        End If
    Next i

    MsgBox "Der Wert A1 kommt " & C(1) & " mal im Array vor."
End Sub

In diesem Beispiel wird ein Array P mit zufälligen Werten gefüllt, und die Anzahl der Vorkommen des Wertes "A1" wird gezählt.


Häufige Fehler und Lösungen

  1. Typen unverträglich: Dieser Fehler tritt auf, wenn du versuchst, einen Wert in ein Array zu speichern, das nicht kompatibel ist. Stelle sicher, dass die Deklaration des Arrays korrekt ist. Verwende Dim P(12) As String für ein String-Array.

  2. Keine Werte in C: Wenn du eine Variable wie C(1) verwendest und sie keinen Wert hat, könnte es daran liegen, dass die Schleife nicht richtig durchlaufen wurde. Überprüfe, ob die Bedingung in der Schleife korrekt ist.


Alternative Methoden

Eine einfache Methode, um die Zählung in einem Array durchzuführen, ist die Verwendung von Select Case. Dies erhöht die Lesbarkeit, besonders wenn du mehrere Werte zählen möchtest.

Dim check(6) As Integer
For i = 1 To 12
    Select Case P(i)
        Case "A1"
            check(1) = check(1) + 1
        Case "A2"
            check(2) = check(2) + 1
        Case "A3"
            check(3) = check(3) + 1
        Case "B1"
            check(4) = check(4) + 1
        Case "B2"
            check(5) = check(5) + 1
        Case "B3"
            check(6) = check(6) + 1
    End Select
Next

Praktische Beispiele

Hier ist ein weiteres Beispiel, das zeigt, wie du die ZÄHLENWENN-Funktion in einem VBA-Container verwenden kannst:

Dim counter As Long
counter = Application.WorksheetFunction.CountIf(P, "A1")
MsgBox "Der Wert A1 kommt " & counter & " mal im Array vor."

Beachte, dass Application.WorksheetFunction.CountIf nur mit Zellbereichen funktioniert. Wenn du ein Array verwenden möchtest, musst du über eine Schleife iterieren.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Halte deine Arrays so klein wie möglich, um die Leistung zu optimieren, besonders bei größeren Datenmengen.
  • Wenn du häufig Zähloperationen durchführst, überlege, ob du eine Funktion schreiben möchtest, die das Zählen in einem Array kapselt.

FAQ: Häufige Fragen

1. Kann ich die ZÄHLENWENN-Funktion direkt auf ein Array anwenden?
Nein, ZÄHLENWENN funktioniert nur mit Zellbereichen. Du musst eine Schleife verwenden, um über das Array zu iterieren.

2. Was ist der Unterschied zwischen CountIf und ZÄHLENWENN?
CountIf ist die VBA-Äquivalente der Excel-Funktion ZÄHLENWENN. Beide erfüllen die gleiche Aufgabe, aber in unterschiedlichen Umgebungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige