Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

zählenwenn mit VBA Count If

zählenwenn mit VBA Count If
03.01.2014 14:57:41
Andy
Hallo,
ich möchte gerne mit VBA bestimmte Einträge in einer Tabelle zählen, die immer mit dem gleichen Muster beginnen:
Beispiele:
x Muster
x 4,6 Muster
x 2,0 Muster
also jeder Eintrag beginnt mit einem x und einem Leerzeichen und dann gibt es zwei Möglichkeiten: 1.) einen Buchstaben oder 2.) eine Zahl
Ich möchte gerne die Einträge in Abhängigkeit des 3. Zeichens zählen. (Abhängigkeit Buchstaben, Zahl,... isnumeric...?)
Bisher habe ich das mit der folgenden Formel ausprobiert:
Anzahl = Application.WorksheetFunction.CountIf(adr, "x *")
Zählen kann ich die Werte, aber nicht mit der gewünschten Abhängigkeit.
Kann mir da jemand weiterhelfen?
Gruß Andy

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zählenwenn mit VBA Count If
03.01.2014 15:33:00
fcs
Hallo Andy,
nach meiner Einschätzung musst du dann den Bereich zellenweise auswerten.
Gruß
Franz Sub SpecialAnzahl() Dim adr As Range Dim Zelle As Range, AnzahlText As Long, AnzahlNumeric As Long Set adr = ActiveSheet.UsedRange 'ggf. anpassen For Each Zelle In adr If Zelle.Text Like "x [0-9]*" Then AnzahlNumeric = AnzahlNumeric + 1 ElseIf Zelle.Text Like "x *" Then AnzahlText = AnzahlText + 1 End If Next MsgBox "Nummerisch: " & AnzahlNumeric & vbLf _ & "Text : " & AnzahlText End Sub

Erweiterung
03.01.2014 16:13:56
Andy
Hallo,
zuerst mal danke für eure Hilfe.
Mit dem Script von fcs funktioniert es. Die beiden anderen Ansätze kann ich nicht nutzen, da ich in den Datentabellen keine Ergänzugen eintragen kann.
Kann das Script noch erweitert werden, so dass ich noch eine Abhängigkeit in der gleichen Zeile abfragen kann?
Beispiel:
Meine Materialnummer war das oben stehende Script. Jetzt möchte ich noch das Lager in meiner Abfrage berücksichtigen und das steht irgendwo in der gleichen Zeile (z.B. 80000 München). Wir haben 4 Lager so dass ich das Ergebnis mit einer Unterabfrage "if Zellen Text" abfragen könnte. Aber mein Problem wäre dann, wie kann ich aus dem oben stehenden Script bei einem Treffer die Zeile ermitteln und diese dann mit einem Untercode ähnlich dem obenstehende ansprechen und abfragen.
Gruß Andy

Anzeige
AW: Erweiterung
03.01.2014 17:06:51
fcs
Hallo Andi,
für eine zusätzliche Prüfung auf eines von 4 Lagern könntest du mit Ergebnis-Arrays arbeiten. In deiner Prüfung wird dem Namen des Lages die Nummer im Array zugewiesen.
So kannst du alle Lager in einem Durchlauf abarbeiten.
"steht irgendwo in der gleichen Zeile" ist für eine Prüfung etwas ungenau. Da sollte es schon ene bestimmte Spalte sein.
Sub SpecialAnzahl()
Dim adr As Range
Dim Zelle As Range, AnzahlText(1 To 4) As Long, AnzahlNumeric(1 To 4) As Long
Dim Zeile As Long, iLager As Long, SpalteLager As Long, strLager(1 to 4)
Set adr = ActiveSheet.UsedRange 'ggf. anpassen
SpalteLager = 4 'Spalte D - Spalte mit Lagerbezeichnung
For Each Zelle In adr
Zeile = Zelle.Row
Select Case Zelle.Parent.Cells(Zeile, SpalteLager).Text
Case "80000 München": iLager = 1: strLager(1) = "80000 München"
Case "Lager B": iLager = 2: strLager(2) = "Lager B"
Case "Lager 3": iLager = 3: strLager(3)= "Lager 3"
Case "Lager D": iLager = 4: strLager(4) = "Lager D"
Case Else
iLager = 0
End Select
If iLager  0 Then
If Zelle.Text Like "x [0-9]*" Then
AnzahlNumeric(iLager) = AnzahlNumeric(iLager) + 1
ElseIf Zelle.Text Like "x *" Then
AnzahlText(iLager) = AnzahlText(iLager) + 1
End If
End If
Next
For iLager = 1 To 4
MsgBox "Nummerisch: " & AnzahlNumeric(iLager) & vbLf _
& "Text : " & AnzahlText(iLager), vbOKOnly, "Ergebnis Lager " & strLager(iLager)
Next
End Sub
Gruß
Franz

Anzeige
Danke!
03.01.2014 17:52:01
Andy
Hallo Franz,
das klappt prima, die kleine Hürde mit der Spaltenauswahl werde ich über eine Imputbox lösen.
Danke für die Unterstützung!
Gruß Andy

AW: zählenwenn mit VBA Count If
03.01.2014 15:35:35
{Boris}
Hi Andy,
alternativ in dieser Richtung:
3. Stelle eine Zahl:
=SUMMENPRODUKT(N(ISTZAHL(TEIL(A1:A100;3;1)*1)))
bzw. in VBA:
Sub til()
MsgBox Evaluate("SUMPRODUCT(N(ISNUMBER(MID(A1:A100,3,1)*1)))")
End Sub
Und der Rest ist dann eben "3. Stelle Text".
VG, Boris

Hilfsspalte wäre auch möglich ...
03.01.2014 15:46:27
Matthias
Hallo
Ob das in Frage kommt, musst Du selbst wissen.
Tabelle1

 AB
1x 1x1WAHR
2x M5 blablaFALSCH
3x 1x2WAHR
4x M5 blablaFALSCH
5x 1x3WAHR
6x M5 blablaFALSCH
7x 1x4WAHR
8x M5 blablaFALSCH
9x 1x5WAHR
10x M5 blablaFALSCH
11x 1x6WAHR

Formeln der Tabelle
ZelleFormel
B1=ISTZAHL(--TEIL(A1;3;1))
B2=ISTZAHL(--TEIL(A2;3;1))
B3=ISTZAHL(--TEIL(A3;3;1))
B4=ISTZAHL(--TEIL(A4;3;1))
B5=ISTZAHL(--TEIL(A5;3;1))
B6=ISTZAHL(--TEIL(A6;3;1))
B7=ISTZAHL(--TEIL(A7;3;1))
B8=ISTZAHL(--TEIL(A8;3;1))
B9=ISTZAHL(--TEIL(A9;3;1))
B10=ISTZAHL(--TEIL(A10;3;1))
B11=ISTZAHL(--TEIL(A11;3;1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Dim AnzZahl
Dim AnzText
AnzZahl = Application.WorksheetFunction.CountIf(Range("B1:B11"), True)
AnzText = Application.WorksheetFunction.CountIf(Range("B1:B11"), False)
MsgBox " Zahl = " & AnzZahl
MsgBox " Text = " & AnzText
Gruß Matthias
Anzeige

325 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige