189 Aufrufe
Gefragt in Tabellenkalkulation von

Hallo,

ich würde gerne die erste Zeile nach einem Wort durchsuchen lassen und die Spaltennummer als Variable in einer MsgBox ausgeben

In den weiten des Internets hab ich mir als Laie folgenden für mich sehr kompakten Code zusammengesucht, welcher leider aber folgende Fehler noch enthält:
- Durchsucht soll nur Zeile 1 werden, Ergebnis wird leider auch geliefert wenn der gesuchte Wert in Zeile 20 steht
- wenn nichts gefunden wurde, soll eine msgbox "nichts gefunden" melden
- wenn doppelt gefunden wurde, soll eine msgbox "doppelt gefunden" melden

Sub FindeSpalte()
Dim Suchwort As String, SMaterial As Integer
Suchwort = "abcd"               'Suchwort
SMaterial = ThisWorkbook.ActiveSheet.Cells.Find(Suchwort).Column
MsgBox SMaterial
End Sub

Der Code gefällt mir sonst sehr gut, weil er sehr kompakt ist, ich weiß, bringt nix wenn die Sachen noch fehlen!

Kann mir jemand bitte helfen?
Danke und liebe Grüße

5 Antworten

0 Punkte
Beantwortet von
Moin

Sub Beispiel()
Dim Suche As Object
Set Suche = ThisWorkbook.ActiveSheet.Rows("1:1").Find("abc")
If Not Suche Is Nothing Then
MsgBox Suche.Column
Else
MsgBox "Nichts gefunden"
End If
End Sub

MfG
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi,

ich würde  es so lösen:

Sub FindeSpalte()
    Dim Suchwort As String, Material As Range
    Suchwort = "abcd"               'Suchwort
    ' ist nicht vorhanden
    If Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) = 0 Then
        MsgBox "Nicht gefunden"
    Else
        ' ist mehrfach vorhanden
        If Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) > 1 Then
            MsgBox "gefunden " & Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) & " mal"
        Else
            ' suche mit kompletter Übereinstimmung
            Set Material = ThisWorkbook.ActiveSheet.Rows(1).Find(Suchwort, lookat:=xlWhole)
            MsgBox Material.Column
        End If
    End If
End Sub

Man sollte auf jeden Fall mit kompletter Übereinstimmung, also mit dem Parameter lookat:=xlWhole suchen, denn andernfalls würde die Zeichenkombination "abcd" auch in z.B. "dfabcdmv" gefunden, was ja nicht erwünscht ist.

Bis später, Karin

0 Punkte
Beantwortet von

Hallo Karin,
danke für deinen Input, wunderbar.
Ja, besser wenn xlWhole eingefügt ist, denn es soll nur der komplette übereinstimmende gefunden und ausgegeben werden.

Folgender Code ist es letztendlich geworden

Sub FindeSpalte()
    Dim Suchwort As String, SpMaterial, SpWerk As Integer
    Suchwort = "Material"                              ' Suchwort
    If Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) = 0 Then                 ' ist nicht vorhanden
        MsgBox "Nicht gefunden"
    Else
        If Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) > 1 Then             ' ist mehrfach vorhanden
            MsgBox "gefunden " & Application.CountIf(ThisWorkbook.ActiveSheet.Rows(1), Suchwort) & " mal"
        Else
            SpMaterial = ThisWorkbook.ActiveSheet.Rows(1).Find(Suchwort, lookat:=xlWhole).Column  ' suche mit kompletter Übereinstimmung
            MsgBox SpMaterial
        End If
    End If
End Sub

ich stelle mir jetzt allerdings die Frage, wenn ich 2 oder 3 Suchwörter habe, die ich mittels Makro auslesen will (die Spalte davon), was muss ich ändern, den Code 3x einfügen wirds vermutlich nicht sein :-)

Danke für deine Hilfe!

liebe Grüße

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
ausgewählt von mickey
 
Beste Antwort

Hi,

mehrere Suchworte gleichzeitig geht nicht - du musst den Code für jedes Suchwort wieder neu ausführen. Du kannst aber das Suchwort dabei variabel gestalten, indem du es in eine Zelle (z.B. A2) schreibst und dann im Code anstelle Suchwort = "Material" dieses verwendest: Suchwort = ThisWorkbook.ActiveSheet.Range("A2")

Bis später, Karin

0 Punkte
Beantwortet von
Hallo Karin,
Danke dir für deine Rückmeldung.
Dann werde ich meine 2-3 Spalten genau so ermittelt für die spätere Verwendung!

Danke für deine Hilfe!

liebe Grüße
...