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

Mehrere Zellen einer Tabelle markieren

Mehrere Zellen einer Tabelle markieren
19.04.2021 17:51:37
Wolfgang
Ich sitze mal wieder vor einem Problem. Ich habe folgendes Makro eingegeben, um (auch wiederholt auftretende) Namen in einer Tabelle einzufärben.

Sub Markieren()
Dim finden As Range
Set finden = Range("B6:L31").Find(what:=Range("P7").Value)
If Not finden Is Nothing Then
finden.Interior.ColorIndex = 6
Else
MsgBox "Der Name ist nicht gefunden"
End If
End Sub
Leider markiert dieses Makro nur einen Wert.
Ich wollte nun ein Makro mit einer For Each-Schleife formulieren, schaffe dieses aber nicht .

Sub Markieren()
Dim Zelle As Range
Dim Name As Range
Set Name =Range("P7")
Range ("B6:L13").Select
For Each Zelle In Selection
If Zelle = Name Then
Zelle.Select
Interior. ColorIndex = 6
Exit Sub
End If
Next Zelle
End Sub
Dieses Makro markiert zwar den gesamten Tabellenbereich, macht aber nicht mehr und endet nicht. Ich denke, ich habe im Bereich If Zelle = Name Then irgendetwas falsch programmiert. Ich würde mich über eine Hilfe sehr freuen.
Wolfgang

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 17:55:00
onur
Geht auch ohne VBA.
Poste doch mal die Datei.
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 17:58:35
Wolfgang
Ja, das stimmt und ist mir auch bewusst. Ich bin aber dabei, diese Prozedur später in ein noch zu erweiterndes Makro einzubinden, in dem die markierten Zellinhalte in ein anderes Programm übertragen werden sollen.
Trotzdem vielen Dank für die schnelle Antwort
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 18:12:09
onur
Dann so:

Dim cell
For Each cell In Range("B6:L31")
If cell = Range("P7") Then cell.Interior.ColorIndex = 6
Next

AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 18:25:22
Wolfgang
das hört sich gut an. Ich werde das mal ausprobieren. Das klingt ja alles sehr einfach. Leider bin ich gerade in einer Telefonkonferenz, so dass ich später daran gehen werde.
Auf jeden Fall - vielen Dank
Wolfgang
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 17:58:20
Hajo_Zi
Hallo Wolfgang,
Zelle.Interior. ColorIndex = 6
GrußformelHomepage
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 18:00:06
Wolfgang
Das hatte ich ursprünglich, funktionierte aber ebenfalls nicht.
Wolfgang
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 18:10:14
Hajo_Zi
Hallo Wolfgang,
Zelle.Interior.ColorIndex = 6
Gruß Hajo
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 18:12:07
Daniel
Hi
For-Schleife ist hier schon notwendig.
sollte man, wenn man mehrere Einträge hat, die bearbeitet werden sollen, das Makro nicht nach dem ersten Eintrag abbrechen (Exit Sub)
man sollte sich seine Programme schon mal durchlesen und sich dabei vorstellen, was der jeweilige Befehl jetzt macht.
Dann findet man solche Fehler auch von alleine.
mit ein paar weiteren Optimierungen (bsw muss man Zellbereiche nicht selektieren, bevor man sie bearbeitet.
Das muss nur der Recorder so aufzeichnen, weil wir so arbeiten, was aber der Benutzung der Maus als Eingabemedium geschuldet ist, VBA braucht das nicht)

Sub Markieren()
Dim Zelle As Range
Dim Name As Range
Set Name =Range("P7")
For Each Zelle In  Range ("B6:L13")
If Zelle.value = Name.value Then
Zelle. ColorIndex = 6
End If
Next Zelle
End Sub
Gruß Daniel
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:07:39
Yal
Hallo zusammen,
Es liegt nicht an die For-schleife, sondern an der Tatsache, dass Find immer nur eine Zelle liefert.
Mit "FindNext" gelangt man an dem nächsten Treffer, bis keine mehr gibt:

Sub FindenUndFärben()
Dim r As Range
With Range("B6:L31")
Set r = .Find(Range("P7").Value)
Do
r.Interior.ColorIndex = 6
Set r = .FindNext (r)
Loop While Not r Is Nothing
End With
End Sub

VG
Yal
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:14:04
Wolfgang
Wunderbar! Dieses kleine Makro funktioniert wunderbar. Nur ich denke ich muss noch eine Schleife voranstellen, damit er nicht endlos herumwerkelt. Ich denke, dass 5 Durchgänge ausreichend sein werden.
Auf jeden Fall herzlichen Dank für diesen Ratschlag
Wolfgang
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:15:09
onur
"Nur ich denke ich muss noch eine Schleife voranstellen, damit er nicht endlos herumwerkelt. Ich denke, dass 5 Durchgänge ausreichend sein werden." -Häääh?
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:18:44
Wolfgang
Das Makro funktioniert ausgezeichnet. Nur es endet nicht. Ich muss durch das Makro beenden. Das wollte ich mir ersparen. Da die Namen maximal 5 mal in der Tabelle erscheinen, meinte ich eine Zählschleife einbauen zu müssen.
Wolfgang
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:20:13
onur
Dann hast du aber irgendwo Mist gebaut - WO GENAU hast du es denn eingebaut?
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:26:10
Wolfgang
Ich habe Dein Makro 1 zu 1 übernommen. Wenn ich es mit zeilenweise überprüfe, springt das gelbe Feld immer wieder zwischen der Do-Zeile und End With hin und her. Bislang stehen in diesem Makro keine weiteren Befehle.
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:29:01
onur
Dann liegt es am restlichen Makro von dir. Bei mir steht nirgendwo "Do-Zeile und End With ".
Mein Makro kann selbstständig laufen (z.B. via Button) - ohne irgend einen Rest..
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:30:42
onur
Du hast nicht mein Makro genommen, du hast ihn offenbar in dein Makro EINGEBAUT.
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:30:10
Yal
Man kann tatsächlich nach "nichts" suchen. .. und vieles davon finden...

Sub FindenUndFärben()
Dim r As Range
If Range("P7") = "" Then Exit Sub
With Range("B6:L31")
Set r = .Find(Range("P7").Value)
Do
r.Interior.ColorIndex = 6
Set r = .FindNext (r)
Loop While Not r Is Nothing
End With
End Sub

Die "Fallschirm"-Variante:

Sub FindenUndFärben()
Dim r As Range
Dim i
If Range("P7") = "" Then Exit Sub
With Range("B6:L31")
Set r = .Find(Range("P7").Value)
Do
i = i + 1
r.Interior.ColorIndex = 6
Set r = .FindNext (r)
Loop While Not (r Is Nothing) And i 
VG
Yal
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:31:33
onur
Und warum schreibst du MIR das?
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:40:38
Yal
Nein, diesmal war ich richtig :-P
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:41:56
Wolfgang
Deine Fallschirm-Variante ist genau nach meinem Geschmack. Sie funktioniert wunderbar. Habe ganz herzlichen Dank dafür!!!!!
Liebe Grüße
Wolfgang
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:34:34
Wolfgang
Ich bin begeistert; Deine Fallschirm-Variante erscheint mir als sehr günstig. Ich werde sie nachher einmal ausprobieren.
Ganz herzlichen Dank für die großartige Mühe!!! (Ja, so ist es, wenn man sich an etwas heranwagt, von dem man lediglich ein Minimalwissen hat)
Wolfgang
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:43:48
Daniel
hi Yal
wenn dann so:

Sub FindenUndFärben()
Dim r As Range
Dim a as string
If Range("P7") = "" Then Exit Sub
With Range("B6:L31")
Set r = .Find(Range("P7").Value)
if not r is nothing then
a = r.address
Do
r.Interior.ColorIndex = 6
Set r = .FindNext (r)
Loop until r.address = a
end if
End With
End Sub
da .Find und .FindNext immer den gesamten Zellbereich durchsuchen, egal wo der Startpunkt der Suche liegt, gibt es für dein DO niemals einen Abbruch.
Wenn der unterste Wert gefunden wird, wird beim nächsten Durchlauf wieder der oberste gefunden, daher die Endlosschleife.
Gruß Daniel
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:50:30
Yal
hi Daniel,
ja, punkte für Dich (dafür ein Minus für Microsoft Online Hilfe):
ohne Prüfung der ersten Treffer startet die Suche aufs Neu, und es läuft in endlose Schleife.
VG
Yal
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 19:34:18
Daniel
nö, den Mist hat Yal gebaut, weil er keine vernünftige Abbruchbedingung eingebaut hat.
.Find und ebenso .FindNext durchsuchen immer den gesamten angegebenen Zellbereich, unabängig von der Startzelle der Suche.
dh wenn du den letzten passenden Eintrag gefunden hast und den nächsten suchst, wird wieder der ersten genommen.
Daher muss man, wenn man mit DO und .FINDNEXT arbeitet, sich die Position der ersten Fundstelle merken und die Schleife abbrechen, wenn diese ein zweites mal gefunden wird.
Oder man löscht bzw verändert den Wert so, dass er nicht nochmal gefunden werden kann, dann funktioniert das mit dem Abbruch bei nicht finden, sonst nicht.
hier tuts aber eigentlich die normale For-Schleife über alle Zellen (was anderes macht .FIND intern auch nicht), die Wolfgang schon geschrieben hat.
Der Fehler wahr, dass er noch ein Exit Sub im Code stehen hatte, mit dem er nicht nur die Schleife, sondern auch das ganze Makro nach dem ersten Fund beendet hat. Wenn man das rausnimmt, sollte sein Makro funktionieren.
Gruß Daniel
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 20:01:55
Daniel
Hi Yal
ja mag sein, aber du hast den entscheidenden Punkt übersehen.
in diesem MS-Beispiel wird der Wert der gefundenen Zelle verändert, beachte das "c.Value = 5"

Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing
Durch diese Veränderung des Zellwertes wird verhindert, dass diese Zelle erneut gefunden werden kann.
Das machst du aber nicht,
Damit kann eine bereits gefundene Zelle wiederholt gefunden werden und somit landest du in der Endlosschleife.
Entweder brauchst du eine andere Abbruchbedingung (z.B. Zelladresse der ersten Fundstelle merken und diese Vergleichen) oder du musst zusätzlich noch das Format der Zelle als Suchkriterum mit verwenden, da du dieses ja veränderst, kann dann die Zelle auch nicht wiederholt gefunden werden.
oder du ermittelst mit Worksheetfunction.CountIF wie oft der gesuchte Wert im Zellbereich vorkommt und verwendest dann eine For-Schleife mit diesem Wert anstelle des Do-Loop.
Gruß Daniel
Anzeige
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 20:13:41
Daniel
hier halt noch ein bisschen ausführlicher
AW: Mehrere Zellen einer Tabelle markieren
19.04.2021 20:53:25
GerdL
Moin,
die Draufsicht ergibt, dass
Zelle.ColorIndex = 6
einen 438 er Laufzeitfehler ergibt.
Die Find-Methode hat ein paar Argumente, die man einstellen sollte.
Gruß Gerd
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige