Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1016to1020
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

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

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige