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

Code optimieren - in Schleife setzen

Forumthread: Code optimieren - in Schleife setzen

Code optimieren - in Schleife setzen
15.08.2025 05:24:55
Lutz
Hallo,
die Reihen 24 - 31 durchlaufen jeweils den selben Code.
Kann mir bitte jemand diese Codes in eine Schleife setzen?

Besten Dank
Gruß Lutz


Sub SchriftfarbeUebernehmen()
Dim QuelleZelle As Range, ZielZelle As Range

Set QuelleZelle = Range("C24") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D24:U24") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C25") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D25:U25") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C26") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D26:U26") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C27") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D27:U27") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C28") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D28:U28") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C29") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D29:U29") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C30") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D30:U30") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C31") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D31:U31") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C24") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D24:U24") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C25") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D25:U25") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C26") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D26:U26") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C27") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D27:U27") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C28") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D28:U28") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C29") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D29:U29") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C30") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D30:U30") 'Schriftfarbe Zielzellen
Set QuelleZelle = Range("C31") 'Schriftfarbe Quellzelle
Set ZielZelle = Range("D31:U31") 'Schriftfarbe Zielzellen

ZielZelle.Font.Color = QuelleZelle.Font.Color 'Übernehmen der Schriftfarbe
End Sub
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 08:45:36
ralf_b
chatgpt macht folgendes daraus. habs nicht getestet.

Sub SchriftfarbeUebernehmen()

Dim i As Long

' Schleife von Zeile 24 bis 31
For i = 24 To 31
Range("D" & i & ":U" & i).Font.Color = Range("C" & i).Font.Color
Next i
End Sub
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 12:54:16
Yal
Moin,

meine BI (biologische Intelligence ;-) macht folgendes daraus (zugegeben: basierend auf dem code von Ralf/chatGPT):

Sub SchriftfarbeUebernehmen()

Dim Z As Range 'Zeile

' Schleife von Zeile 24 bis 31
For Each Z In ActiveSheet.Rows("24:31")
Z.Range("D:U").Font.Color = Z.Range("C1").Font.Color
Next
End Sub
wo ist die Unterschied: man nimmt den Zeilenbereich 24:31 als ein Auflistung von Zeilenobjekte, daraus für jede Zeile den Bereich D:U (relativ, also nur für die gerade verarbeitete Zeile) auf Basis von C1 (hier auch relativ zu Z. Man könnte auch Z.Range("C:C") oder Z.Cells(3) nehmen) gesetzt.

VG
Yal
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 13:39:33
daniel
Hi

Wenn sich das Bereich noch verschieben kann und das funktionieren soll ohne den Code anzupassen, dann geht das am besten über Namen, weil man diese im Makro verwenden kann und sich diese Namen Bein Einfügen oder Löschen von Zellen mit anpassen. Die Idee hat ja Case schon in den Raum geworden

Ich würde es hier so umsetzen:

1. Definiere im Namensmanager den ganzen Bereich C24:U31 als Namen ("FarbeX")

2. Verwenden folgenden Code:

Dim R as Range

For Each R in Range("FarbeX").Rows
R.Font.Color = R(1).Font.Color
Next

Die Schleife läuft über jede Zeile des Bereichs und überträgt die Farbe der ersten Zelle auf die restlichen Zellen der Zeile.

Gruß Daniel


Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 14:55:16
Lutz
Hi Daniel,
dein Code schwärzt alles ein, keine Ahnung, warum.

Ich hab jetzt mal eine Beispieldatei gemacht - mit zwei Makros. Links dein Code. Rechts meiner mit ziemlich vielen Namensdefinitionen und reichlich umständlich. Meiner macht zwar, was er soll, wenn es größer werden soll, aber codetechnisch nicht schön.

https://www.herber.de/bbs/user/178612.xls
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 14:57:05
Lutz
Links mein Code. Rechts deiner ... habs verdreht.
AW: Code optimieren - in Schleife setzen
15.08.2025 15:27:43
Yal
Moin,

R ist ein Objekt vom Typ "Row". Im ggt zu Range ist "Cells" nicht das Default-Attribut von Row, was ein weglassen ermöglichen würde.

Mit
Dim R As Range

For Each R In Range("FarbeX").Rows
R.Cells.Font.Color = R.Cells(1).Font.Color
Next
End Sub
wird das Problem gelöst.

VG
Yal
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 15:41:21
Lutz
Danke für den langen Atem! Jetzt läuft's.
AW: Code optimieren - in Schleife setzen
15.08.2025 15:50:47
daniel
schön, danke für die Rückmeldung.
muss nur die Schriftfarbe angepasst werden oder können die die übrigen Formate auch übernommen werden?
wenn alle Formate übernommen werden, ginge es einfach und ohne Schleife

With Range("FarbeX").

.columns(1).Copy
.PasteSpecial xlpasteformats
End with


Gruß Daniel
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 13:07:20
Lutz
Anwendungs- oder objektdefinierter Fehler kommt da bei mir.
Deine Erklärung verstehe ich zugegeben nicht.
AW: Code optimieren - in Schleife setzen
15.08.2025 13:22:36
Yal
Korrektur:
Z.Range("D1:U1").Font.Color = Z.Range("C1").Font.Color

Erklärung:
Ich empfehle VBA-Realisierung immer zuerst unter dem Makrorekorder aufzuzeichnen. Dann hat man einen Code, womit man sich auseinander setzen kann. Dabei merkt man, dass Excel sehr viel mit Objekte arbeitet: Worksheet, Range, Row, usw., dass diese Objekte in Auflistung "gesammelt" werden Worksheets, Cells, Rows (immer mit dem "s" am Ende"), und dass diese Objekte eine Zuordnung haben: Cells sind in einem Worksheet, aber auch in einem Range oder ein Row oder Column.
Daraus kann man, anstatt mit i = 24 to 31, mit Auflistung von Objekte und daraus die einzelne Objekte arbeiten.

Beispiel
For each Z in Range ("B2:D3")

Debug.Print Z.Address, Z.value, Z.Font.Color
Next


Es ist nicht "besser", aber erst wenn man es weißt, kann man gezielte danach schauen und VBA schneller verstehen ;-)
(und auch die Onlinehilfe von learn.microsoft.com)

VG
Yal
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 12:51:22
Lutz
Hallo Ralf_b,
Dank, es funktioniert.

Ich hab bei meiner Fragestellung nicht bedacht, dass über C24 irgendwann eine Zeile eingefügt werden könnte. Dann würde es so nicht mehr gehen. Ich kann zwar C24 als "Anfang" und U31 als "Ende" definieren, den Code kann ich aber nicht danach anpassen.

Wenn es jemand kann ...
Besten Dank für die Mühe.

Gruß Lutz


Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 13:00:08
Yal
Hallo Lutz,

"gib mir einen festen Punkt im Universum und ich hebe die Erde" gilt als "Archimedischer Punkt".

So ist auch mit Programmieren: erkenne die Fakten, die sich nicht ändern, und darauf kannst Du bauen.

Welche Eigenschaft hat diese Zeile 24, die danach 25 wird, sodass wir diese eindeutig erkennen, auch wenn n Zeilen dazwischen eingeführt werden?
Das gleiche für Zeile 31. Oder ist es immer 7 Zeilen?

VG
Yal
Anzeige
AW: Code optimieren - in Schleife setzen
15.08.2025 13:15:54
Lutz
>>>
Welche Eigenschaft hat diese Zeile 24, die danach 25 wird ...

C24 definiere ich als "Anfang" und U31 als "Ende". Füge ich oberhalb Zeile 24 eine Zeile ein, ist "Anfang" in C25 und "Ende" U32.
Der Code soll nur den Bereich zwischen "Anfang" und "Ende" betreffen.
Du könntest...
15.08.2025 13:21:26
Case
Moin, :-)

... dem Bereich C24:C31 einen Namen vergeben (Bereich markieren und im Namensmanager einen Namen festlegen) - im Beispiel ist es "Farbe": ;-)
https://www.herber.de/bbs/user/178610.xlsb

Servus
Case
Anzeige
AW: Du könntest...
15.08.2025 13:33:47
Lutz

>>>
... dem Bereich C24:C31 einen Namen vergeben (Bereich markieren und im Namensmanager einen Namen festlegen) - im Beispiel ist es "Farbe": ;-)

Die Datei lässt sich zwar nicht öffnen, Bereich markieren und im Namensmanager einen Namen festlegen hab ich hinbekommen.
Na, wenn du den...
15.08.2025 13:37:27
Case
Moin, :-)

... Namen "Farbe" vergeben hast, dann dieser Code (sonst Namen anpassen):
Option Explicit

Public Sub Main()
Dim lngCount As Long
For lngCount = 1 To Range("Farbe").Rows.Count
Range("Farbe").Rows(lngCount).Offset(0, 1).Resize(1, 18).Interior.Color = Range("Farbe").Rows(lngCount).Interior.Color
Next lngCount
End Sub

Servus
Case
Anzeige
Nimm...
15.08.2025 13:44:37
Case
Moin, :-)

... Font statt Interior. ;-)

Servus
Case
AW: Code optimieren - in Schleife setzen
15.08.2025 13:28:59
Yal
Dass Du es als Anfang und Ende definierst, ist eine schöne Sache. Wichtig ist, wie Excel es definieren kann.
Wie kannst Du Excel beibringen, dass deine Definition, die womöglich nur in deinem Kopf lagert, von Excel eindeutig wahrgenommen werden kann?

Eines Tages meldete meine Mutter, dass "eine Nathalie für dich angerufen hat". Was sie nicht wusste, war, dass ich zu dieser Zeitpunkt 4 Nathalies kannte. Nun Verstehst Du vielleicht, welche Problem Excel haben kann, wenn Du sagst "ich nenne es Anfangszeile". Excel kennt viel Zeilen...

VG
Yal
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18