For-Each- Schleife bei Arrays
Betrifft: For-Each- Schleife bei Arrays
von: Florian
Geschrieben am: 17.09.2014 13:02:21
Liebe VBA- Freunde,
ich habe ein Problem, dass wahrscheinlich auf meine begrenzten Fähigkeiten als VBA-User zurückzuführen ist. Bin schon lange am Suchen, finde aber irgendwie keine funktionierende Lösung.
Zum Sachverhalt:
Ich habe ein Eingabefeld, in das ich einen String eingebe, der von meinem Makro ausgelesen wird. Daraufhin wird prüft ein Array, wie häufig dieser String in meiner Tabelle vorkommt - soweit so gut. Jetzt stellt sich mir die Frage, wie ich dem Makro sagen soll, dass er in jeder Zeile, das erste rechts stehende "x" suchen soll und mir dessen Adresse ausgibt? Hatte hier die For-Each-Schleife ins Auge gefasst, aber irgendwie klappt das nicht so, wie ich mir das vorgestellt hab... Habe euch hier mal die Datei angehangen: https://www.herber.de/bbs/user/92679.xlsm
Kann jemand Abhilfe schaffen? Danke im Voraus!
Grüße,
Florian
 |
Betrifft: AW: For-Each- Schleife bei Arrays
von: Jack_d
Geschrieben am: 17.09.2014 13:35:54
Hallo Florian
so kann der Code aussehen
Hier die Lösung als WS_Change (Makro muss in das Arbeitsblatt1)
Ausgabe der Adresse derzeit über msgbox
Grüße
Private Sub Worksheet_change(ByVal Target As Range)
Dim Suchwert As String
Dim rngZelle As Range
Suchwert = Intersect(Target, Range("C15"))
With Worksheets("Einzelteile")
Set rngZelle = .Columns(3).Find(Suchwert, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
Set rngZelle2 = .Rows(rngZelle.Row).Find("x", lookat:=xlWhole)
If Not rngZelle2 Is Nothing Then
Adresse = rngZelle2.Address
End If
End If
Set rngZelle = Nothing
Set rngZelle2 = Nothing
End With
MsgBox Adresse
End Sub
 |
Betrifft: Was heißt 'rechtsstehendes "x"', ...
von: Luc:-?
Geschrieben am: 17.09.2014 13:42:55
…Florian,
in den Zellen von Blatt3 steht ab einer bestimmten Spalte nur x bzw X! So wie du formulierst klingt das nach längeren Texten, die auf x enden.
Ansonsten ist da nur ein rudimentäres Makro zu finden, ganz ohne For Each-Zyklus! Einen solchen müsstest du über alle Zeilen des Gesamtbereichs laufen lassen und hast dann in Form der LaufVariablen gleich einen Bereich, auf den du die vbMethode .Find ansetzen könntest, also ungefähr so:
For Each xRo In bereich.Rows
If Not xRo.Find(…) Is Nothing Then …
Next xRo
Ansonsten das übliche AnfängerDurcheinander wie fehlende bzw Mittendrin-Variablen-/Konstanten-Deklaration (im Pgm unveränderte Werte sollten als
Const deklariert wdn!), Benutzung von reservierten VBA-Begriffen als VariablenNamen (nimm doch dt Begriffe, da passiert das kaum mal!) usw.
Es gibt hier im Forum und seinem Archiv doch genügend Bspp wie das ordentlich gemacht wird, warum dann so?!
Gruß, Luc :-?
Betrifft: AW: For-Each- Schleife bei Arrays
von: Beverly
Geschrieben am: 17.09.2014 17:16:55
Hi Florian,
eine Möglichkeit:
Sub Finden()
Dim rngZelle As Range
Dim strStart As String
Dim arrFound()
Dim lngFound As Long
With Worksheets("Einzelteile")
Set rngZelle = .Columns(3).Find(Range("C15").Value, lookat:=xlPart)
If Not rngZelle Is Nothing Then
strStart = rngZelle.Address
ReDim arrFound(0)
Do
If Not IsError(Application.Match("x", .Rows(rngZelle.Row), 0)) Then
ReDim Preserve arrFound(0 To lngFound)
arrFound(lngFound) = Cells(rngZelle.Row, Application.Match("x", .Rows( _
rngZelle.Row), 0)).Address(False, False)
lngFound = lngFound + 1
End If
Set rngZelle = .Columns(3).FindNext(rngZelle)
Loop While Not rngZelle Is Nothing And rngZelle.Address <> strStart
End If
End With
Range("A1").Resize(UBound(arrFound()) + 1, 1) = Application.Transpose(arrFound())
End Sub
Es wird nur etwas ins Array geschrieben, wenn tatsächlich in mindestens einer Zelle ein "x" steht.

Beiträge aus den Excel-Beispielen zum Thema "For-Each- Schleife bei Arrays"