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

Forumthread: Zählenwenn Formel ersetzen mit Makro

Zählenwenn Formel ersetzen mit Makro
09.07.2021 07:28:56
Daniel
Hallo Zusammen,
ich benötige bitte etwas Hilfe, da meine Kenntnisse nicht ganz ausreichen.
Ausgangsituation:
Excel Workbook mit 2 Blättern
Blatt 1 enthält Spalte A mit festen Daten
Blatt 2 ist variabel und wird immer wieder geändert, gelöscht, angepasst usw.
Nun prüfe ich auf Blatt 2 ob die Werte in Spalte B irgendwo in Spalte A auf Blatt 1 vorkommen.
Falls ja, wird in Blatt 2 in Spalte E eine 1 (wenn vorhanden) oder eine 0 (wenn nicht vorhanden) eingetragen.
Anfangs habe ich das manuell gemacht und meine Formel nach unten gezogen;
mittlerweile füge ich die Formel per Makro ein, was auch gut funktioniert.
Im Letzten Schritt ersetze ich nun in Blatt 2 die Spalte B mit E
Hier mein Makro:

Sub machs()
Dim Zeilenende As Long
Dim Zeilenende2 As Long
'Zielliste
With Sheets("Testliste")
Zeilenende2 = Sheets("Artikelliste").Cells(Rows.Count, 1).End(xlUp).Row
Zeilenende = .Cells(.Rows.Count, 1).End(xlUp).Row
' in E wird der Wert 0 oder 1 eingetragen
' ist der Wert aus B in der Artikelliste ab A2 bis Zeilenende vorhanden dann 1 ansonsten 0
.Range("E2:E" & Zeilenende).FormulaLocal = "=--(ZÄHLENWENN(Artikelliste!$A$2:$A$" & Zeilenende2 & ";B2)>0)"
End With
End Sub
Nun möchte ich das gerne vollständig als VBA und nicht als Formel einfügen UND
ist es möglich, direkt in die Spalte B die 0 oder 1 einzutragen?
Mit meinem Makro ist das leider nicht möglich da sonst alle Zellen mit 0 befüllt werden
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zählenwenn Formel ersetzen mit Makro
09.07.2021 08:24:38
ChrisL
Hi
Mit Formel und abschliessendem Ersetzen von Formel durch Wert bist du schneller. Andernfalls musst die Zellen einzeln durchlaufen:

Sub machs()
Dim Zelle As Range
With Sheets("Testliste")
For Each Zelle In .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
Zelle.Offset(0, 1) = IIf(WorksheetFunction.CountIf(Worksheets("Artikelliste").Columns(1), Zelle), 1, 0)
Next Zelle
End With
End Sub
cu
Chris
Anzeige
AW: Zählenwenn Formel ersetzen mit Makro
09.07.2021 08:40:30
Stefan
Hallo :)

Option Explicit
Sub machs()
Dim lzeile As Long
Dim lzeile2 As Long
For lzeile = 1 To Sheets("Testliste").Cells(Rows.Count, 2).End(xlUp).Row
For lzeile2 = 1 To Sheets("Artikelliste").Cells(Rows.Count, 1).End(xlUp).Row
If UCase(Sheets("Testliste").Cells(lzeile, 2)) = UCase(Sheets("Artikelliste").Cells(lzeile2, 1)) Then 'Durch UCase wird die Groß und Kleinschreibung nicht beachtet
Sheets("Testliste").Cells(lzeile, 2).Value = 1 'Es wird in in Spalte B der bisherige Eintrag durch 1 oder 0 überschrieben
else Sheets("Testliste").Cells(lzeile, 2).Value =
End If
Next
Next
End Sub
Falls ich das mit dem Überschreiben in Spalte B (Testliste) falsch verstanden hab, einfach in beiden Codezeilen die "2" erhöhen bis zu der Spalte wo die Auswertung hinsoll.
Code ist durch die fehlende Beispieldatei ungetestet :)
Viel Erfolg und freundliche Grüße
Stefan
Anzeige
AW: Zählenwenn Formel ersetzen mit Makro
09.07.2021 08:47:48
Daniel
Hi
wie lang sind denn deine Listen?
Gruß Daniel
AW: Zählenwenn Formel ersetzen mit Makro
09.07.2021 11:39:13
Daniel
Schonmal Danke für die bisherige Hilfe.
Die Liste mit den festen Daten beinhaltet derzeit 500 Zeilen ... wachsend - irgendwann können da mehrere tausend Einträge drinnen sein.
Die Liste, welche geprüft wird beinhaltet je nach Verarbeitungszweck zwischen 5 und 300 Zeilen.
Wobei mir jetzt auch ein Gedankenfehler aufgefallen ist und ich von vorne neu denken muss.
Wenn mein Zellwert aus der "Testliste" in der "Artikelliste" vorkommt und eine 1 gesetzt wird, ist das ja super;
aber anstatt der 0 benötige ich den eigentlichen Zellwert. dieser soll dann nicht 0 sein.
Jetzt weis ich nur nicht, ob ich das mit dem ZÄHLENWENN auch abbilden kann
Anzeige
AW: Zählenwenn Formel ersetzen mit Makro
09.07.2021 12:06:42
Daniel
Hi
geht schon, nur halt dann mit normalen WENN und nicht mit dem Rumgerechne, was manche anstelle dem WENN bevorzugen:
=Wenn(ZählenWenn(Artikelliste;Zellwert);1;Zellwert)
wenn die Datenmengen größer werden, kann das mit dem ZählenWenn etwas langsam werden.
etwas schneller wäre dann:
=Wenn(IstZahl(Vergleich(Zellwert;Artikelliste;0));1;Zellwert)
bei sehr großen Datenmengen (mehrere tausend Zeilen) gehts so am schnellsten:
1. Artikelliste aufsteigend sortieren
2. =Wenn(SVerweis(Zellwert;Artikelliste;1;wahr)=Zellwert;1;Zellwert)
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige