HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: For Each Schleife

Gerd K
26.04.2026 21:25:39
For Each Schleife
Piet
26.04.2026 21:51:17
AW: For Each Schleife
xlKing
26.04.2026 22:01:21
AW: For Each Schleife
Gerd K
27.04.2026 08:54:28
AW: For Each Schleife
Piet
27.04.2026 10:52:55
AW: For Each Schleife
Gerd K
27.04.2026 15:02:50
AW: For Each Schleife
Marc
28.04.2026 17:36:15
AW: For Each Schleife
Marc
28.04.2026 17:33:18
AW: For Each Schleife
GerdL
27.04.2026 08:54:06
AW: Suche in Spaltenbereich
Yal
27.04.2026 09:17:02
AW: For Each Schleife
daniel
27.04.2026 16:02:39
AW: For Each Schleife
Marc
28.04.2026 17:32:08
AW: For Each Schleife
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Gerd K
26.04.2026 21:25:39
For Each Schleife
Hallo, ich habe eine For Each Schleife.

Dim such
Dim c as Range

such = [b1]

For Each c In Range("b7:b72")
If c = such then c.activate: goto 10
Next

Es wird b1 gesucht. In b1 steht z. B. 18.

Such = [b1] ergibt aber "18" in Anführungszeichen
und c ergibt 18, somit gibt es keine Übereinstimmung und die Schleife läuft durch ohne bei 18 anzuhalten.

Ich habe vieles versucht und finde keine Lösung für mein Problem.

Vielleicht kann mir jemand helfen.
Vielen Dank im Voraus.

Gerd K
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Piet
26.04.2026 21:51:17
AW: For Each Schleife
Hallo Gerd

ich habe deinen Code mal getestet und finde keinen Fehler. Da ist was unstimmig?
Steht in [b1] die Zahl 18, oder steht in [b1] ="18" mit diesen "" Zeichen als String?
Excel selbst verwandelt die 18 nicht in "18". Sollte in der Zelle '18 stehen geht es so:
such = CLng([b1]) für Ganzzahl oder CSng([b1]) für Kommazahlen

mfg Piet
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
xlKing
26.04.2026 22:01:21
AW: For Each Schleife
Hi Gerd,

der Text "18" ist nun mal etwas Anderes als die Zahl 18. Damit muss der Vergleich fehlschlagen. Sorge also dafür dass die Zelle B1 eine Zahl enthält und dein Problem ist gelöst. Zahlen werden in Excelzellen standardmäßig rechtsbündig dargestellt, während Texte linksbündig dargestellt werden. Daran kannst du den Unterschied erkennen.

wenn du sicher bist, dass die Texte in B1 immer einen Zahlentext enthalten, kannst du diesen Text auch mit Umwandlungsfunktionen wie Such=CLng([B1]) oder Such=CDbl([B1]) in eine Zahl umwandeln. Auf diese Umwandlungsfunktion kannst du aber auch verzichten wenn du deine Such-Variable gleich korrekt deklarierst mit Dim Such As Long oder Dim Such As Double

Gruß Mr. K.
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Gerd K
27.04.2026 08:54:28
AW: For Each Schleife
Hallo, ersteinmal vielen Dank für die Antworten. Das ist eine große Excel Datei mit 135 Tabellenblättern und jedes Tabellenblatt steht für einen Kleingarten. Jedes Tabellenblatt trägt die Gartennummer. Mit
=Teil(Zelle ("Dateiname";F7);FINDEN("]";ZELLE("dateiname";F7))+1;255)
wird der Name des Tabellenblattes in die Zelle B1 eingetragen.
Mit such = CLng([b1]) klappt das sehr gut. Die "18" wird in 18 umgewandelt und die Schleife funktioniert perfekt.
Nun haben nicht alle Gärten eine Zahl sondern haben zusätzlich einen Buchstaben z.B. 75 A und 75 B. Hier gibt es einen Laufzeitfehler 13, Typen unverträglich.
Wie kann ich das lösen.
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Piet
27.04.2026 10:52:55
AW: For Each Schleife
Hallo Gerd

probier mal wenn du such in einen String änderst: such = CStr([b1])
Alternativ könntest du auch den Autofilter verwenden. s. unten
Der Code gehört in die Tabelle wo deine Tabellen Namen stehen. Nicht in ein Modul!

mfg Piet

'Autofilter Spalte B

Private Sub Worksheet_Change(ByVal Target As Range)
If InStr(Target.Address, ":") Then Exit Sub
If Target.Address <> "$B$1" Then Exit Sub
Dim FTxt As Variant

ActiveSheet.AutoFilterMode = False
If Target.Value = Empty Then Exit Sub

With Range("B6:B75")
.AutoFilter: FTxt = Target & "*"
.AutoFilter Field:=1, Criteria1:=FTxt, _
Operator:=xlOr, Criteria2:=Target
End With
Target.Select
End Sub
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Gerd K
27.04.2026 15:02:50
AW: For Each Schleife
Problem gelöst,

vielen Dank an Alle.
MfG Gerd K
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Marc
28.04.2026 17:36:15
AW: For Each Schleife
Hier empfiehlt es sich die Zellen, wenn sie sowohl reine Zahlen als auch Kombinationen enthalten...


entweder die entsprechende Spalte explizit als Text zu definieren (was aber nicht immer 100% funktioniert)

die Variable such als String definieren (das solltest du in jedem Fall tun) --> dann wird auch eine Zahl in ein String implizit umgewandelt.
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Marc
28.04.2026 17:33:18
AW: For Each Schleife
Such=CDbl([B1])

macht keinen Sinn
als Cint oder Clng vielleicht noch
aber wenn es eine Ganzzahl ist, sicher kein Cdbl
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
GerdL
27.04.2026 08:54:06
AW: Suche in Spaltenbereich
Hallo Namensvetter,

du kannst auch mal dies testen.

Sub Unit()


Dim zeile As Variant

zeile = Application.Match(Range("B1").Value, Range("B7:B72"), 0)
If IsNumeric(zeile) Then Cells(zeile + 6, 2).Activate

End Sub

Gruß Gerd
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Yal
27.04.2026 09:17:02
AW: For Each Schleife
Hallo Gerd,

um VBA im Griff zu bekommen, muss man die Konzepte von Objekte und Eigenschaften von Objekt kennen.
Mit For c in Range(...) setzst Du in der Variable c einen Zeiger auf jede einzelne Zelle des gebebenen Bereichs. Also c hat den Typ Zelle (in VBA "Range" benannt).

Du willst aber den Inhalt von Zellen vergleichen.

Version 1: Inhalt von B1 in einer Variable aufnehmen und Inhalt vergleichen
Sub AufTrefffer_platzieren()

Dim such
Dim c As Range

With Worksheets("Tabelle1")
such = .Range("B1").Value
For Each c In .Range("B7:B72")
If c.Value = such Then
c.Activate
Exit For
End If
Next
End With
End Sub


Version 2, ohne Zwischenvariable:
Sub AufTrefffer_platzieren()

Dim c As Range

With Worksheets("Tabelle1")
For Each c In .Range("B7:B72")
If c.Value = .Range("B1").Value Then
c.Activate
Exit For
End If
Next
End With
End Sub


VG
Yal
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
daniel
27.04.2026 16:02:39
AW: For Each Schleife
Hi
Excel unterscheidet beim einfachen Vergleich (=) zwischen Text und Zahl, dh der Text "18" ist nicht das gleiche wie die Zahl 18.

ich würde hier aber empfehlen, einfach alles in Text zu wandeln, denn das funktioniert immer, während der Versuch, einen Textwert in eine Zahl zu wandeln, einen Fehler erzeugt wenn das nicht funktioniert.
Wenn man immer nur Zellwerte ausliest, kann man die TEXT-Eigenschaft auslesen, dass ist der Zahlenwert, so wie er in der Zelle angezeigt wird auch Text.
Auch Fehlerwerte sind dann Text und werden dadurch unpopblematisch und erfordern eigenständige Programmierung.

also im Prinzip dann so:

such = Range("B1").Text


For Each c In Range("b7:b72")
If c.Text = such then c.activate: goto 10
Next


andere Möglichkeiten um in VBA eine Zahl in einen Text zu wandeln:
CStr(Zahl)
Format(Zahl, Formatstring)
Zahl & ""
Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
2010
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
Marc
28.04.2026 17:32:08
AW: For Each Schleife
Du hast such nicht korrekt definiert

wenn

dim such as Integer