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

For Each Schleife

Forumthread: For Each Schleife

For Each Schleife
26.04.2026 23:25:39
Gerd K
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
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: For Each Schleife
26.04.2026 23:51:17
Piet
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
Anzeige
AW: For Each Schleife
27.04.2026 00:01:21
xlKing
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.
Anzeige
AW: For Each Schleife
27.04.2026 10:54:28
Gerd K
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.
Anzeige
AW: For Each Schleife
28.04.2026 19:33:18
Marc
Such=CDbl([B1])

macht keinen Sinn
als Cint oder Clng vielleicht noch
aber wenn es eine Ganzzahl ist, sicher kein Cdbl
AW: For Each Schleife
27.04.2026 12:52:55
Piet
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
Anzeige
AW: For Each Schleife
28.04.2026 19:36:15
Marc
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.
Anzeige
AW: For Each Schleife
27.04.2026 17:02:50
Gerd K
Problem gelöst,

vielen Dank an Alle.
MfG Gerd K
AW: Suche in Spaltenbereich
27.04.2026 10:54:06
GerdL
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
Anzeige
AW: For Each Schleife
27.04.2026 11:17:02
Yal
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
Anzeige
AW: For Each Schleife
27.04.2026 18:02:39
daniel
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
Anzeige
AW: For Each Schleife
28.04.2026 19:32:08
Marc
Du hast such nicht korrekt definiert

wenn

dim such as Integer

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