Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

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.


GrußformelBeverly's Excel - Inn


 

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