Supportnet Computer
Planet of Tech

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

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

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.

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 Sub

gruß
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

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.
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 Sub
Damit 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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: