Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: in VBA Zeile mit for schleife durchsuchen

in VBA Zeile mit for schleife durchsuchen
07.09.2018 13:32:53
aelli
Hallo zusammen,
Ich möchte nachdem eine Zelle angeklickt wurde die Zellen rechts von der angeklickten Zelle durchsuchen. Und sobald eine gefüllte Zelle gefunden ist, soll ein Wert aus Zeile 6 und der Spalte der gefundenen Zelle in Spalte 8 und die gleiche Zeile der Zelle kopiert werden.
Die Codeschnipsel die ich dazu bisher habe sind wiefolgt:
Dim Cell As Range
For Each Cell in Range("weiß nicht wie man die Range angibt.. Soll von der angeklickten Zelle bis ActiveCell.row, 377")
if Cell.interior.color x1None then
Cells(ActiveCell.Row, 8).Value = Wert aus Gefundene Zelle Zeile 6 gleiche Spalte.
Else Cells(ActiveCell.Row, 9).Value = vbNullString (Falls er nichts findet & das funktioniert bereits)
End If
Ich hoffe man kann das ungefähr verstehen sonst kann ich gerne auch mal den gesamten Code posten.
vielen Dank schonmal
Gruss
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 14:07:26
UweD
Hallo
Mangels Beispieldaten hier ungeprüfter Code.
- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Code dort reincopieren
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Zelle As Range
    For Each Zelle In Target.Resize(1, 377 - Target.Columns + 1)
        If Zelle.Interior.Color <> xlNone Then
            Cells(Zelle.Row, 8).Value = Cells(6, Zelle.Column).Value
        Else
            Cells(Zelle.Row, 9).Value = vbNullString
        End If
    Next
End Sub
LG UweD
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 14:47:21
aelli
Hallo Uwe,
Danke dafür ganz funktionieren tut es noch nicht.
Mit diesem Code läuft er durch die Schleife zwar durch und zählt auch die Werte hoch aber stoppt nicht bei einem ausgemalten Feld..
Dim index As Integer
For index = ActiveCell.Column To 377
If Cells(ActiveCell.Row, index).Interior.color xlNone Then
Cells(ActiveCell.Row, 8).Value = Cells(6, index).Value
Else
Cells(ActiveCell.Row, 8).Value = vbNullString
End If
Application.Wait (Now + TimeValue("0:00:01"))
Next
Den wait hab ich nur um besser sehen zu können was passiert.
Hättest du eine Idee warum die If Bedingung nicht greift?
Gruss Aelli
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 14:55:06
fcs
Hallo aelli,
sollte etwa so funktionieren

Dim rngCell As Range, Zeile As Long
Dim wks As Worksheet
Set wks = ActiveSheet
With wks
Zeile = ActiveCell.Row
For Each rngCell In .Range(ActiveCell, .Cells(Zeile, 377)) 'angeklickten Zelle bis  _
ActiveCell.row, 377
If rngCell.Interior.ColorIndex  xlColorIndexNone Then
.Cells(Zeile, 8).Value = .Cells(6, rngCell.Column).Value ' Wert aus Gefundene Zelle  _
Zeile 6 gleiche Spalte.
Else
.Cells(Zeile, 9).Value = vbNullString '(Falls er nichts findet & das funktioniert  _
bereits)
End If
Next
End With
Gruß
Franz
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 15:20:44
aelli
Hallo Franz,
habs leicht abgeändert und es funktioniert! :)
Das einzige Problem ist, dass es wenn kein farbiges Feld mehr kommt relativ lange dauert bis er einmal alle Zellen durchgegangen ist..(Währenddessen blinkt der Lade Kreis von Win10 ständig auf) Liegt das an Excel oder gibt es da eine Möglichkeit diesen Vorgang zu beschleunigen?
Ich meine rein Rechenleistungstechnisch muss hier ja nicht viel passieren.
Gruss Aelli
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 19:06:42
Piet
Hallo
aus Spass habe ich den Code mal durchlaufen lassen, unter 1 sec. bei mir!
Dann musst du noch eine Zeitverzögerung im Code haben. Was ist mit Application.Wait 1 sec.?
Hast du diese Zeile aus deinem Code heraus genommen?
Ansonsten kannst du noch diesen Befehl einbauen, wenn dahinter ALLE Zellen ohne Farbe sind!
If rngCell.Interior.ColorIndex = xlColorIndexNone Then Exit Sub
mfg Piet
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
07.09.2018 19:21:09
daniel
Hi
prinzipell ist bei diesem Code nur die letzte gefärbte Zelle relevant, sollten mehrere Zellen gefärbt sein.
von daher wäre es sinnvoller, die Schleife von rechts nach links laufen zu lassen und bei der ersten Fundstelle abzubrechen.
dann muss der Wert nur 1x geschrieben werden.
ich würds mal so probieren:
dim sp as Long
dim ze as Long
ze = activeCell.row
for sp = 377 to activeCell.column step -1
if cells(ze, sp).interior.Colorindex  xlColorindexnone then
Cells(ze, 8).Value = Cells(6, sp).value
Exit for
end if
next
if sp 
das sollte schneller sein, weil hier nur 1x ein Wert in die Zelle geschrieben wird.
Gruß Daniel
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
11.09.2018 09:06:34
aelli
Hallo Daniel,
danke für deine Hilfe. Ich habe meinen Code jetzt auch so hinbekommen das er schnell durchläuft. (Das Problem war, dass wenn kein weiteres Kästchen ausgefüllt war, wurde jedes explicit geleert. Das hat dann bei den 360 verbleibenden etwas gedauert).
Nun habe ich allerdings ein neues Problem. Das Programm soll auch in die andere Richtung suchen um so ein anderes Kästchen zu korrigieren. Mein Code ist bisher so:
'loescht das Datum in Beginn, falls die Zelle mit dem gleichen Datum im Kalender deaktiviert  _
wird
If Cells(ActiveCell.Row, 8).Value = Cells(6, ActiveCell.Column).Value Then
Cells(ActiveCell.Row, 8).Value = vbNullString
Dim rngCell As Range
For Each rngCell In Range(ActiveCell, Cells(ActiveCell.Row, 377)) 'gehe von  _
der markierten Zelle das restliche Jahr in dieser Zeile durch
If rngCell.Interior.ColorIndex  xlColorIndexNone Then
Cells(ActiveCell.Row, 8).Value = Cells(6, rngCell.Column).Value
Exit For    'Wenn er den ersten Wert gefunden hat verlasse die Schleife
End If
Next
End If
'loescht das Datum in Ende, falls die Zelle mit dem gleichen Datum im Kalender  _
deaktiviert wird
If Cells(ActiveCell.Row, 9).Value = Cells(6, ActiveCell.Column).Value Then
Cells(ActiveCell.Row, 9).Value = vbNullString
Dim rngCellTwo As Range
For Each rngCellTwo In Range(Cells(ActiveCell.Row, 12, ActiveCell)) 'gehe  _
von der markierten Zelle das restliche Jahr in dieser Zeile durch
If rngCellTwo.Interior.ColorIndex  xlColorIndexNone Then
Cells(ActiveCell.Row, 9).Value = Cells(6, rngCellTwo.Column).Value
Exit For    'Wenn er den ersten Wert gefunden hat verlasse die Schleife
End If
Next
End If

Der obere Teil mit dem Beginn funktioniert einwandfrei, jz soll das ganze eigentlich nurnoch gespiegelt werden.
Vielen Dank für Eure Hilfe schonmal.
Grus Aelli
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
11.09.2018 09:21:53
aelli
Hallo Daniel,
danke für deine Hilfe. Ich habe meinen Code jetzt auch so hinbekommen das er schnell durchläuft. (Das Problem war, dass wenn kein weiteres Kästchen ausgefüllt war, wurde jedes explicit geleert. Das hat dann bei den 360 verbleibenden etwas gedauert).
Nun habe ich allerdings ein neues Problem. Das Programm soll auch in die andere Richtung suchen um so ein anderes Kästchen zu korrigieren. Mein Code ist bisher so:
'loescht das Datum in Beginn, falls die Zelle mit dem gleichen Datum im Kalender deaktiviert  _
wird
If Cells(ActiveCell.Row, 8).Value = Cells(6, ActiveCell.Column).Value Then
Cells(ActiveCell.Row, 8).Value = vbNullString
Dim rngCell As Range
For Each rngCell In Range(ActiveCell, Cells(ActiveCell.Row, 377)) 'gehe von  _
der markierten Zelle das restliche Jahr in dieser Zeile durch
If rngCell.Interior.ColorIndex  xlColorIndexNone Then
Cells(ActiveCell.Row, 8).Value = Cells(6, rngCell.Column).Value
Exit For    'Wenn er den ersten Wert gefunden hat verlasse die Schleife
End If
Next
End If
'loescht das Datum in Ende, falls die Zelle mit dem gleichen Datum im Kalender  _
deaktiviert wird
If Cells(ActiveCell.Row, 9).Value = Cells(6, ActiveCell.Column).Value Then
Cells(ActiveCell.Row, 9).Value = vbNullString
Dim rngCellTwo As Range
For Each rngCellTwo In Range(Cells(ActiveCell.Row, 12, ActiveCell)) 'gehe  _
von der markierten Zelle das restliche Jahr in dieser Zeile durch
If rngCellTwo.Interior.ColorIndex  xlColorIndexNone Then
Cells(ActiveCell.Row, 9).Value = Cells(6, rngCellTwo.Column).Value
Exit For    'Wenn er den ersten Wert gefunden hat verlasse die Schleife
End If
Next
End If

Der obere Teil mit dem Beginn funktioniert einwandfrei, jz soll das ganze eigentlich nurnoch gespiegelt werden.
Vielen Dank für Eure Hilfe schonmal.
Grus Aelli
Anzeige
AW: in VBA Zeile mit for schleife durchsuchen
11.09.2018 09:29:32
aelli
Habs geschafft!
Man muss einfach nur das Exit For wegmachen.
Danke Euch allen!!
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA-Zeilen mit For-Schleife durchsuchen


Schritt-für-Schritt-Anleitung

Um in Excel VBA eine Zeile mit einer For-Schleife zu durchsuchen, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Rechtsklicke auf den Tabellenblattreiter und wähle „Code anzeigen“.
  2. Code einfügen:

    • Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Zelle As Range
    For Each Zelle In Target.Resize(1, 377 - Target.Columns + 1)
        If Zelle.Interior.Color <> xlNone Then
            Cells(Zelle.Row, 8).Value = Cells(6, Zelle.Column).Value
        Else
            Cells(Zelle.Row, 9).Value = vbNullString
        End If
    Next
End Sub
  1. Anpassen der Range:

    • Stelle sicher, dass die Range in der Schleife korrekt definiert ist. Hier wird von der angeklickten Zelle bis zur Spalte 377 iteriert.
  2. Testen:

    • Klicke auf verschiedene Zellen im Arbeitsblatt, um zu sehen, ob die Werte in Spalte 8 und 9 entsprechend aktualisiert werden.

Häufige Fehler und Lösungen

  • Problem: Der Code stoppt nicht bei gefärbten Zellen.

    • Lösung: Überprüfe die Bedingung If Zelle.Interior.Color <> xlNone und stelle sicher, dass die Zellen tatsächlich gefärbt sind und nicht den Standardwert haben.
  • Problem: Langsame Ausführung bei vielen Zellen.

    • Lösung: Verwende Application.ScreenUpdating = False am Anfang und Application.ScreenUpdating = True am Ende des Codes, um die Bildschirmaktualisierung während der Ausführung zu deaktivieren.

Alternative Methoden

Eine alternative Methode besteht darin, die Schleife von rechts nach links laufen zu lassen, um die Ausführung zu beschleunigen. Hier ist ein Beispiel:

Dim sp As Long
Dim ze As Long
ze = ActiveCell.Row
For sp = 377 To ActiveCell.Column Step -1
    If Cells(ze, sp).Interior.ColorIndex <> xlColorIndexNone Then
        Cells(ze, 8).Value = Cells(6, sp).Value
        Exit For
    End If
Next

Diese Methode ist effizienter, da sie die Schleife bei der ersten gefundenen gefärbten Zelle abbricht.


Praktische Beispiele

  1. Wert kopieren:

    • Wenn ein gefärbtes Feld gefunden wird, kopiere den Wert aus Zeile 6 in Spalte 8.
  2. Löschen von Werten:

    • Wenn kein gefärbtes Feld mehr gefunden wird, setze die Zelle in Spalte 9 auf vbNullString.

Tipps für Profis

  • Optimierung: Nutze Exit For, um die Schleife zu beenden, sobald der erste gefärbte Wert gefunden wurde.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um potenzielle Laufzeitfehler abzufangen und den Code stabiler zu machen.
  • Performance: Reduziere die Anzahl der Zellzugriffe, indem du Werte in einem Array speicherst und später zurückschreibst.

FAQ: Häufige Fragen

1. Wie kann ich die Schleife anpassen, um nur bestimmte Zellen zu durchsuchen? Du kannst die Range in der For-Schleife anpassen, um nur die gewünschten Zellen zu durchsuchen, z.B. For Each Zelle In Range("A1:B10").

2. Was kann ich tun, wenn der Code nicht funktioniert? Überprüfe die Farben der Zellen und stelle sicher, dass die Bedingungen im If-Statement korrekt sind. Debugge den Code Schritt für Schritt, um den Fehler zu identifizieren.

3. Wie kann ich den Code so anpassen, dass er in beide Richtungen sucht? Du kannst die Schleife duplizieren und in umgekehrter Reihenfolge (z.B. von Spalte 1 bis 377) eine weitere For-Schleife einfügen. Achte darauf, dass das Exit For-Statement nur dort verwendet wird, wo es notwendig ist.

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