Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
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

VBA - ZÄHLENWENN gesuchter Text enthalten

VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 09:38:21
RK
Aloha.
Ich möchte gern zählen, wenn der Text in Zelle D4 in der Quellspalte A vorkommt.
Die Programmzeile funktioniert, wenn in Spalte A selbiges wie in D4 steht.
Steht in A etwas davor oder dahinter, wird es nicht in die Zählung einbezogen.
Wie muss ich folgende Zeile modifizieren?
ZRB.Range(ZRB.Cells(1, 16384), ZRB.Cells(loLetzte1, 16384)).FormulaLocal = "=ZÄHLENWENNS(A:A;$D$4;B:B;XFC1)"
Vielen Dank im Voraus!
RK

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 09:46:43
Werner
Hallo,
"=ZÄHLENWENNS(A:A;""*""&$D$4&""*"";B:B;XFC1)"
Gruß Werner
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 09:59:14
ChrisL
Hi
Hier noch die englische Schreibweisen (falls mal jemand eine andere Spracheinstellung hat)...
...Formula = "=COUNTIFS(A:A,""*""&$D$4&""*"",B:B,XFC1)"
cu
Chris
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 10:30:46
RK
Super. Danke für die sehr schnellen Antworten!
Ich hätte noch eine Sorge.
Vor dem ZÄHLENWENN muss nach einem bestimmten Kriterium gefiltert werden.
Dies passiert über folgende Zeilen.
Spalte A beinhaltet das Modell.
Modell = ZRB.Range("$D$4")
ZRB.Range("A:B").AutoFilter Field:=1, Criteria1:="*" & Modell & "*"
Wie muss ich folgende Zeilen modifizieren, dass ich nach einem weiteren Kriterium filtern kann?
Spalte A beinhaltet das Modell, Spalte C den Typ.
Modell = ZRB.Range("$D$4")
Typ = ZRB.Range("$D$5")
ZRB.Range("A:C").AutoFilter Field:=1, Criteria1:="*" & Modell & "*", Field:=3 Criteria1:="*" & Typ & "*"

Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 10:50:14
ChrisL
Hi
ZRB.Range("A:C").AutoFilter Field:=1, Criteria1:="*" & Modell & "*"
ZRB.Range("A:C").AutoFilter Field:=3, Criteria1:="*" & Typ & "*"
cu
Chris
Gerne u. Danke für die Rückmeldung...
21.09.2018 11:21:55
Werner
Hallo,
...eine Lösung für dein anderes Problem hast du ja schon von Chris.
Gruß Werner
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 11:41:07
RK
Leider nein, dennoch Dank an Chris.
Ich muss weiter ausholen, denn das Makro bleibt hängen.
Bevor ich jedoch alles erkläre, hänge ich die Datei an.
Ziel ist es den Typ ebenso vorzufiltern, sodass der Reason mit 0 garnicht erst gezählt oder angezeigt wird.
https://www.herber.de/bbs/user/124129.zip
@Werner
Falls du Selbiger bist kommt Dir das Thema bestimmt bekannt vor. :)
https://www.herber.de/forum/archiv/1640to1644/t1642895.htm
Vielen Dank für eure Hilfe!
Sub Makro1()
Application.ScreenUpdating = False
Dim Modell, Typ As String
Dim loLetzte1 As Long
Dim QD, QP As String
Set ZRB = ThisWorkbook.Sheets(1)
ZRB.Range("W2:X15").ClearContents
Model = ZRB.Range("$Z$2")
Typ = ZRB.Range("$Z$3")
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
If Not Model = vbNullString Then
ZRB.Range("A:A").AutoFilter Field:=1, Criteria1:="*" & Model & "*"
'ZRB.Range("A:C").AutoFilter Field:=3, Criteria1:="*" & Typ & "*"
If ZRB.Cells(ZRB.Rows.Count, 1).End(xlUp).Row > 1 Then
ZRB.AutoFilter.Range.Offset(1).Resize(ZRB.AutoFilter.Range.Rows.Count - 1).Columns(2). _
SpecialCells(xlCellTypeVisible).Copy
ZRB.Range("XFC1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ZRB.AutoFilterMode = False
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(1, 16383), ZRB.Cells(loLetzte1, 16383)).RemoveDuplicates Columns:=1, _
Header:=xlNo
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(1, 16384), ZRB.Cells(loLetzte1, 16384)).FormulaLocal = "=ZÄ _
HLENWENNS(A:A;""*""&$Z$2&""*"";B:B;XFC1;C:C;$Z$3)"
ZRB.Range(ZRB.Cells(1, 16383), ZRB.Cells(loLetzte1, 16384)).Copy
ZRB.Cells(2, 23).PasteSpecial Paste:=xlPasteValues
ZRB.Columns("XFC:XFD").ClearContents
ZRB.Range("A1").Select
Else
MsgBox "Das gesuchte Modell ist nicht vorhanden."
ZRB.AutoFilterMode = False
End If
Else
MsgBox "Es wurde kein Modell in Zelle Z2 angegeben."
End If
Application.ScreenUpdating = True
End Sub

Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 12:26:51
ChrisL
Hi
Zip kann ich wegen Firewall nicht öffnen.
cu
Chris
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 12:33:57
RK
Anders kann ich es Dir leider nicht zusenden, oder?
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 12:34:34
Werner
Hallo,
ja, der bin ich.
Das liegt daran, dass du im ersten Schritt nur die Spalte A filterst, während du beim zweiten Filtern die Spalten A:C filterst.
Außerdem ist der Eintrag in Z3 eine echte Zahl, die du aber in eine Variable vom Typ String packst.
Dann hast du beim zweiten Filter, ein Zahlenfilter, den Joker drin. Erstens brauchst du den Joker hier nicht und zweitens funktioniert der mit dem Zahlenfilter sowieso nicht.
Zudem solltest du dir angewöhnen deine Variablen richtig zu deklarieren.
Du hast das hier:
Dim Model, Typ As String

Hier ist nur die Variable Typ als String deklariert, die Variable Model ist vom Typ Variant, weil der Typ nicht angegeben ist.
Korrekt wäre:
Dim Model As String, Typ As String

Aber wie schon geschrieben in deinem Fall:
Dim Model as String, Typ As Long
Ganzer Code:
Sub Makro1()
Application.ScreenUpdating = False
Dim Modell As String, Typ As Long
Dim loLetzte1 As Long
Dim QD, QP As String
QP = "F:\Bearbeitung\FCA\Import\Source"
QD = Dir(QP & "\*." & "xlsx")
'Set QAM = Workbooks.Open(QP & "\" & QD)
'Set QRB = QAM.Sheets(1)
Set ZRB = ThisWorkbook.Sheets(1)
ZRB.Range("W2:X15").ClearContents
Model = ZRB.Range("$Z$2")
Typ = ZRB.Range("$Z$3")
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
If Not Model = vbNullString Then
ZRB.Range("A:C").AutoFilter Field:=1, Criteria1:="*" & Model & "*"
ZRB.Range("A:C").AutoFilter Field:=3, Criteria1:=Typ
If ZRB.Cells(ZRB.Rows.Count, 1).End(xlUp).Row > 1 Then
ZRB.AutoFilter.Range.Offset(1).Resize(ZRB.AutoFilter.Range.Rows.Count - 1).Columns(2). _
SpecialCells(xlCellTypeVisible).Copy
ZRB.Range("XFC1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ZRB.AutoFilterMode = False
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(1, 16383), ZRB.Cells(loLetzte1, 16383)).RemoveDuplicates Columns:=1, _
Header:=xlNo
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(1, 16384), ZRB.Cells(loLetzte1, 16384)).FormulaLocal = "=ZÄ _
HLENWENNS(A:A;""*""&$Z$2&""*"";B:B;XFC1;C:C;$Z$3)"
ZRB.Range(ZRB.Cells(1, 16383), ZRB.Cells(loLetzte1, 16384)).Copy
ZRB.Cells(2, 23).PasteSpecial Paste:=xlPasteValues
ZRB.Columns("XFC:XFD").ClearContents
ZRB.Range("A1").Select
Else
MsgBox "Das gesuchte Modell ist nicht vorhanden."
ZRB.AutoFilterMode = False
End If
Else
MsgBox "Es wurde kein Modell in Zelle Z2 angegeben."
End If
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 13:20:47
RK
Vielen Dank. Endlich geht es - juhu!
Das Filtern von A:C usw. habe ich in allen Varianten probiert.
Es lag an der Deklaration der Variablen.
Bisher ging ich davon aus, dass die einmalige Deklaration für alle davor stehenden Variablen reicht.
Was passiert, wenn die Zahlen in Spalte C (Typ) unterschiedlich als Zahl oder Text formatiert sind?
Ich meiner externen Rohdatendatei, die ich noch einbinden muss, ist dies nämlich der Fall.
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 14:12:21
Werner
Hallo,
wer oder was hindert dich denn daran, alles in echte Zahlen umzuwandeln.
Ich würde mal dringend davon abraten zu versuchen Äpfel mit Birnen zu vergleichen.
Mehr Infos kann ich dir dazu leider nicht geben, da ich weder deine Rohdaten kenne, noch weiß wie du die "einbindest".
Gruß Werner
Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
21.09.2018 15:02:12
RK
Ich konnte es soweit umsetzen.
Die Excel-Rohdatendatei beinhaltet ca. 50 gefüllte Spalten, je tausende Zeilen.
Bevor ich jedoch meine Fragen nicht in diesem einfachen Beispiel lösen kann, brauche ich nicht mit den echten Rohdaten anfangen.
Hoffentlich letztes Problem:
Wenn ich die Spalten A und B verschiebe funktioniert das Makro, trotz Anpassung nicht mehr.
Was mache ich nun wieder falsch?
Hier nochmal die Datei.
Auf der zweiten Registerkarte sind die Spalten anders und das Makro angepasst.
https://www.herber.de/bbs/user/124136.zip
Anzeige
AW: VBA - ZÄHLENWENN gesuchter Text enthalten
22.09.2018 14:06:11
Werner
Hallo,
vor allem, dass du das Layout einfach änderst. Warum glaubst du, dass ich um eine Beispielmappe gebeten habe.
Dann schreibt man ein Makro, das sich an der Beispielmappe orientiert, das dann ja nicht mehr laufen kann, wenn einfach das Layout geändert wird.
Sub Import_Sheet_2()
Application.ScreenUpdating = False
Dim Modell As String
Dim Typ As Long
Dim loLetzte1 As Long
Dim QD, QP As String
QP = "F:\Bearbeitung\FCA\Import\Source"
QD = Dir(QP & "\*." & "xlsx")
'Set QAM = Workbooks.Open(QP & "\" & QD)
'Set QRB = QAM.Sheets(1)
'## bei dir: Set ZRB = ThisWorkbook.Sheets(1)
'## Sheet(1) ist das erste Sheet Reihenfolge siehe Tabellenblattreiter
'## und das ist bei dir "Evalueation 1"
Set ZRB = ThisWorkbook.Worksheets("Evaluation 2")
ZRB.Range("W2:X15").ClearContents
Model = ZRB.Range("$Z$2")
Typ = ZRB.Range("$Z$3")
If Not Model = vbNullString Then
ZRB.Range("B:F").AutoFilter Field:=1, Criteria1:="*" & Model & "*"
ZRB.Range("B:F").AutoFilter Field:=5, Criteria1:=Typ
'## bei dir: If ZRB.Cells(ZRB.Rows.Count, 1).End(xlUp).Row > 1 Then
'## Spalte 1 (A) ist aber leer
If ZRB.Cells(ZRB.Rows.Count, 2).End(xlUp).Row > 1 Then
'## bei dir: ZRB.AutoFilter.Range.Offset(1).Resize(ZRB.AutoFilter.Range.Rows.Count - 1). _
Columns(2).SpecialCells(xlCellTypeVisible).Copy
'## tatsächlich willst du aber die Daten aus Spalte E und das ist Columns(4) ausgehend  _
vom Filterbereich der in B beginnt
ZRB.AutoFilter.Range.Offset(1).Resize(ZRB.AutoFilter.Range.Rows.Count - 1).Columns(4). _
SpecialCells(xlCellTypeVisible).Copy
ZRB.Range("XFC2").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
ZRB.AutoFilterMode = False
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(2, 16383), ZRB.Cells(loLetzte1, 16383)).RemoveDuplicates Columns:=1, _
Header:=xlYes
loLetzte1 = ZRB.Cells(ZRB.Rows.Count, 16383).End(xlUp).Row
ZRB.Range(ZRB.Cells(2, 16384), ZRB.Cells(loLetzte1, 16384)).FormulaLocal = "=ZÄ _
HLENWENNS(B:B;""*""&$Z$2&""*"";E:E;XFC2;F:F;$Z$3)"
ZRB.Range(ZRB.Cells(2, 16383), ZRB.Cells(loLetzte1, 16384)).Copy
ZRB.Cells(2, 23).PasteSpecial Paste:=xlPasteValues
ZRB.Columns("XFC:XFD").ClearContents
ZRB.Range("A1").Select
Else
MsgBox "Das gesuchte Modell ist nicht vorhanden."
ZRB.AutoFilterMode = False
End If
Else
MsgBox "Es wurde kein Modell in Zelle Z2 angegeben."
End If
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
eine Antwort gibts wohl keine mehr. owT.
25.09.2018 18:53:41
Werner
AW: eine Antwort gibts wohl keine mehr. owT.
26.09.2018 08:28:52
RK
Eine Antwort hätte es noch gegeben, nur habe ich eben ein Projekt auf dem Tisch, welches höhere Priorität genießt. Kommende Woche geht es mit diesem Projekt weiter.
Deine Anpassungen habe ich angesehen und bin Dir sehr dankbar für die Verbesserungen. Ich kann keine Beispielmappe bzw. Rohdaten herausgeben, da es sich um interne Angaben verschiedenster Automobilhersteller handelt.
Dass ich Stück für Stück meine erfundene Vorlage den Originalen anpasse, dient dem Verständnis des Makros. Durch deine Erklärungen kann ich Schritt für Schritt nachvollziehen wo im Makro was beachtet werden muss. Die Rohdaten liegen je Autohersteller in verschiedenen Formaten vor, sodass ich zukünftig gezwungen bin das Makro stetig anzupassen. Was ich hier Schritt für Schritt simulierte, wird auch in der Praxis der Fall sein. Eine finale Beispielmappe gibt es nicht. Hätte ich mich für eine Vorlage entschieden, so hätte mir das Wissen zur Umsetzung für andere DBs gefehlt.
Vielen Dank für deine Mühe!
Anzeige
wenn du jedes mal....
27.09.2018 03:52:49
Werner
Hallo,
den Code an geänderte Vorlagen anpassen willst, dann wünsche ich dir viel Spaß dabei.
Anders herum wird ein Schuh daraus. Die Vorlage an das Makro anpassen. Wer oder was hindert dich denn daran beim Datenimport die Daten dorthin zu importieren, wo du sie für einen korrekten Makrolauf brauchst.
Gruß Werner
AW: wenn du jedes mal....
27.09.2018 07:12:55
RK
Die relevanten Spalten in den Rohdatendateien sind bei jedem Hersteller andere. Mal steht das Relevante in B, G, J, Y und Z, mal in F, T, U, V und X usw... Es ist je Hersteller eine einmalige Anpassung der Quell-Spalten notwendig.
Auch wenn ich die Daten erst irgendwo hinschiebe müsste ich angeben aus welchen Quell-Spalten er überhaupt die Daten beziehen soll. Es käme auf das Selbe hinaus und wäre ein unnötiger Zwischenschritt, da ich wie bisher die Daten direkt verarbeiten kann.
Anzeige

357 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige