Supportnet / Forum / Tabellenkalkulation
VBA-Makro in Excel nur in gefilterten Zeilen ausführen
Frage
Hallo zusammen,
vielleicht mal wieder ne ganz einfache Frage...
Ich hab in einer Ecxel-Tabelle ein Makro, welches alle Zeilen durchläuft.
Hab das so programiert... vielleicht nicht elegant, aber ich wußte es nicht anders: ( x ist die laufende Zeile)
sub beispiel ()
Anfang:
x = 1
[Aktion]
x =x + 1
if x < 1000
goto Anfang
end if
end sub
Ich möchte aber nun mit dem Auto-Filter bestimmte Zeilen auswählen und das Makro dann nur in diesen Zeilen ausführen
Geht das?
Dankeschön & Gruß aus Stuttgart
Antwort 1 von schnallgonz
Salve,
SpecialCells heißt das Zauberwort für Dein Problem
guxu Excelhilfe oder in diesem Forum z.B. hier:
https://supportnet.de/threads/1631959
mfg
schnallgonz
SpecialCells heißt das Zauberwort für Dein Problem
guxu Excelhilfe oder in diesem Forum z.B. hier:
https://supportnet.de/threads/1631959
mfg
schnallgonz
Antwort 2 von andreas_3
Hallo Schnallgonz (und/oder alle anderen)
das sieht nach einem vielversprechenden Tipp aus, allerdings steh ich bei der Umstetzung (von dem Beispiel und auch mit der Excel-Hilfe) auf dem Schlauch.
Bin da ziemlicher Autodidakt-Anfänger und hab grad auch irgendwie nicht den Nerv, mich da reinzuknien. Darf ich deshalb nochmal um Hilfe bitten?
Ich hab ne Tabelle
Spalte1 Spalte2 Spalte3
A 2
B 2
A 1
C 2
A 1
und möchte nun nach "A" und " 1" filtern und dann im Makro jeweils die 3 Spalte ansteuern [ Cells (x, 3).Select ] aber eben nur die gefilteren Zeilen.
Schon klar, dass man das in dem Beispiel anders machen könnte, aber ich brauch es halt so.
Dankeschön für jede Hilfe
Gruß aus Stuttgart
Andreas
das sieht nach einem vielversprechenden Tipp aus, allerdings steh ich bei der Umstetzung (von dem Beispiel und auch mit der Excel-Hilfe) auf dem Schlauch.
Bin da ziemlicher Autodidakt-Anfänger und hab grad auch irgendwie nicht den Nerv, mich da reinzuknien. Darf ich deshalb nochmal um Hilfe bitten?
Ich hab ne Tabelle
Spalte1 Spalte2 Spalte3
A 2
B 2
A 1
C 2
A 1
und möchte nun nach "A" und " 1" filtern und dann im Makro jeweils die 3 Spalte ansteuern [ Cells (x, 3).Select ] aber eben nur die gefilteren Zeilen.
Schon klar, dass man das in dem Beispiel anders machen könnte, aber ich brauch es halt so.
Dankeschön für jede Hilfe
Gruß aus Stuttgart
Andreas
Antwort 3 von schnallgonz
Hallo Andreas,
ganz kann ich Dir noch nicht folgen.
Das Filterkriterium ist individuell oder konstant "A1"?
Letzteres kann man natürlich voreinstellen, ansonsten klickt man
im Autofilter eben auf den gewünschten Wert.
Dann reicht zum markieren in Spalte3 die zweite Codezeile.
gruß
schnallgonz
ganz kann ich Dir noch nicht folgen.
Das Filterkriterium ist individuell oder konstant "A1"?
Letzteres kann man natürlich voreinstellen, ansonsten klickt man
im Autofilter eben auf den gewünschten Wert.
Dann reicht zum markieren in Spalte3 die zweite Codezeile.
Sub Spalte_3_markieren()
'nach Zellinhalt "A1" filtern
Selection.AutoFilter Field:=1, Criteria1:="A1"
'im jetzt eingestellten Autofilter alle sichtbaren Zellen in Spalte3
Range("C2:C" & Range("C65536").End(xlUp).Row).SpecialCells(12).Select
End Subgruß
schnallgonz
Antwort 4 von andreas_3
Hallo Schnallgonz,
dankeschön, dass Du danbleibst :-)
Ich kann halt auch schwer erklären...
also, erstens, der Filter ist sehr variabel, die echte Tabelle hat wesentlich mehr Spalten, es wird nach verschiedenen Kriterien gefiltert, machmal nach der, manchmal nach ner anderen, kann man also nicht voreinstellen.,
Und dann muß ich mit dem Makro wirklich jede Zeile einzeln ansteuern, weil in jeder (gefilterten Zeile eine größere Aktion ausgeführt werden muß (in Verbindung mit Reflektion, wenn dir das was sagt....)
Es muß also so aussehen
x = [erste gefilterte Zeile]
cells (x,3). select
[Aktion ausführen]
x = [nächste gefilterte Zeile]
cells(x,3.select
[Aktion ausführen]
usw
Danke nochmals, würde mir wirklich sehr helfen, wenn das klappt...
LG
Andreas
dankeschön, dass Du danbleibst :-)
Ich kann halt auch schwer erklären...
also, erstens, der Filter ist sehr variabel, die echte Tabelle hat wesentlich mehr Spalten, es wird nach verschiedenen Kriterien gefiltert, machmal nach der, manchmal nach ner anderen, kann man also nicht voreinstellen.,
Und dann muß ich mit dem Makro wirklich jede Zeile einzeln ansteuern, weil in jeder (gefilterten Zeile eine größere Aktion ausgeführt werden muß (in Verbindung mit Reflektion, wenn dir das was sagt....)
Es muß also so aussehen
x = [erste gefilterte Zeile]
cells (x,3). select
[Aktion ausführen]
x = [nächste gefilterte Zeile]
cells(x,3.select
[Aktion ausführen]
usw
Danke nochmals, würde mir wirklich sehr helfen, wenn das klappt...
LG
Andreas
Antwort 5 von schnallgonz
Salve Andreas,
bei mir ist jetzt folgendes angekommen:
1. das Filtern erledigst Du manuell
2. im gefilterten Bereich soll in SpalteC nacheinander jede Zeile ausgewählt werden.
Hier mein Vorschlag zu 2.
dann wird eine MsgBox aufgerufen und es geht weiter zur nächsten Zeile.
Anstelle der MsgBox kommt Deine Aktion.
Wenn der Code steht, wird alles gnadenlos durchgeorgelt
Deshalb ist ein vorheriges Sichern der Datei kein Fehler...
mfg
schnallgonz
bei mir ist jetzt folgendes angekommen:
1. das Filtern erledigst Du manuell
2. im gefilterten Bereich soll in SpalteC nacheinander jede Zeile ausgewählt werden.
Hier mein Vorschlag zu 2.
Sub Zeilen_C_markieren()
Dim rngFilterCell As Range
For Each rngFilterCell In Range("C2:C" & Range("C65536").End(xlUp).Row).SpecialCells(12)
Range(rngFilterCell.Address).Select
MsgBox "SoSo"
Next
End SubDamit sollte jede Zeile im Filterbereich markiert werden,dann wird eine MsgBox aufgerufen und es geht weiter zur nächsten Zeile.
Anstelle der MsgBox kommt Deine Aktion.
Wenn der Code steht, wird alles gnadenlos durchgeorgelt
Deshalb ist ein vorheriges Sichern der Datei kein Fehler...
mfg
schnallgonz
Antwort 6 von andreas_3
Halllo Schnallgonz,
entschuldige die späte Antowrt, konnte mich jetzt erst damit beschäftigen...
ja - es funktioniert, super -dankeschön
was ich noch selbst kombiniert habe (ist hoffentlich nicht zu unelegant ;-) ) ist
Sub Zeilen_C_markieren()
Dim rngFilterCell As Range
For Each rngFilterCell In Range("C2:C" & Range("C65536").End(xlUp).Row).SpecialCells(12)
Range(rngFilterCell.Address).Select
x = ActiveCell.Row ' damit ich verschiedene Zellen der gefilterten Zeile ansteuern kann
cells (x, 3). select [Action]
cells (x, 5).select [Action]
Next
End Sub
Also vielen Dank nochmals für Deine Hilfe!!
Gruß
Andreas
entschuldige die späte Antowrt, konnte mich jetzt erst damit beschäftigen...
ja - es funktioniert, super -dankeschön
was ich noch selbst kombiniert habe (ist hoffentlich nicht zu unelegant ;-) ) ist
Sub Zeilen_C_markieren()
Dim rngFilterCell As Range
For Each rngFilterCell In Range("C2:C" & Range("C65536").End(xlUp).Row).SpecialCells(12)
Range(rngFilterCell.Address).Select
x = ActiveCell.Row ' damit ich verschiedene Zellen der gefilterten Zeile ansteuern kann
cells (x, 3). select [Action]
cells (x, 5).select [Action]
Next
End Sub
Also vielen Dank nochmals für Deine Hilfe!!
Gruß
Andreas
Antwort 7 von schnallgonz
Hallo Andreas,
Danke für die Rückmeldung und Glückwunsch zur Modifizierung :-)
Deine Anfrage ist 2x gelistet und coros hat hier
https://supportnet.de/threads/1733902
noch eine Antwort gepostet.
mfg
schnallgonz
Danke für die Rückmeldung und Glückwunsch zur Modifizierung :-)
Deine Anfrage ist 2x gelistet und coros hat hier
https://supportnet.de/threads/1733902
noch eine Antwort gepostet.
mfg
schnallgonz

