Microsoft Excel

Herbers Excel/VBA-Archiv

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

Excel VBA - String Suche

Betrifft: Excel VBA - String Suche von: Marcel Fischer
Geschrieben am: 28.09.2020 20:10:30

Hallo zusammen

Ich habe ein CSV File das ich in Excel importiert habe. Dies sieht wie im Beispiel unten aus. Nun versuche ich gerade in Excel VBA einen kleinen Code zu schreiben, der mir über einen Button in einer Spalte A über zwei zugehörige Strings (Strings als Eingabe in einem Eingabefeld) sucht und dann entsprechend über die Spalte B in Abhängigkeit von Spalte C (für Europa +1 Tage / Amerika +2 Tage) einen Rückgabewert ausgibt.

Als bessere Erklärung sollen folgende Schritte dies verdeutlichen:

1. Drücken von einem Button
2. Ein Eingabefeld1 (VBA) soll erscheinen in dem der Suchstring1 eingeben werden kann: "Fiat2"
3. Ein Eingabefeld2 (VBA) soll erscheinen in dem der Suchstring2 eingeben werden kann: "Abnahme"
4. Rückgabewert in einer MsgBox soll nun das Datum 26.04.2020 sein

Bemerkung: Das Datum 26.04.2020 wird so berechnet das "Fiat2" mit dem Feld "Abnahme" in Zeile 9 gefunden wird. Dies hat in der Spalte B das Datum 24.04.2020 mit der Abhängigkeit von Spalte C "Amerika", was bedeutet, dass als Ausgabewert das Datum mit 2 Tagen addiert werden soll (Europa würde eine Addition mit einem Tag bedeuten). Als Rückgabewert in der MsgBox erscheint nun das Datum 26.04.2020.

………………….( Spalte A )……..............…….( Spalte B )……..............…….( Spalte C)
( Zeile 1 )………….Task Name…………………….….Datum……………………….….Ort
( Zeile 2 )…………..Auto Fiat1…………………….….22.03.2020……………….…….Europa
( Zeile 3 )……….….Start…………………………..….23.03.2020
( Zeile 4 )……….….Bemalung………………….…….24.03.2020
( Zeile 5 )…………..Abnahme……………………..….25.03.2020
( Zeile 6 )……….….Fertigstellung……………......….26.03.2020
( Zeile 7 )…………. Auto Fiat2…………...................22.04.2020……................…….Amerika
( Zeile 8 )……….….Start………...........................….23.04.2020
( Zeile 9 )……….….Bemalung………..................….24.04.2020
( Zeile 10 )……...….Abnahme………..................….25.04.2020
( Zeile 11 )……...….Fertigstellung…...........………. 26.04.2020
( Zeile 12 )…..….….Auto Fiat3………..................….22.05.2020…….................…….Europa
( Zeile 13 )………….Start…………........................... 23.05.2020
( Zeile 14 )………….Bemalung……...................…….24.05.2020
( Zeile 15 )………….Abnahme………....................….25.05.2020
( Zeile 16 )………….Fertigstellung…….............…….26.05.2020
( Zeile 16 )…………. usw. ……………….................…….usw. ............................…...usw.

Ich komme aber gerade nicht vom Fleck und wollte fragen ob mir jemand helfen kann. Für jede Hilfe oder Codebeispiel wäre ich sehr dankbar.

Besten Dank.

Marcel

Betrifft: AW: Excel VBA - String Suche
von: Daniel
Geschrieben am: 28.09.2020 20:51:48

Hi
beispielsweise so:
Sub test()
Dim Wert1 As String
Dim Wert2 As String
Dim Ergebnis As Date

Dim Zelle1 As Range
Dim Zelle2 As Range


Wert1 = InputBox("Hinweistext 1")
Wert2 = InputBox("Hinweistext 2")
If Wert1 = "" And Wert2 = "" Then Exit Sub

Set Zelle1 = Columns(1).Find(what:=Wert1, lookat:=xlWhole, searchdirection:=xlNext)
Set Zelle2 = Columns(1).Find(what:=Wert2, after:=Zelle1, lookat:=xlWhole, searchdirection:= _
xlNext)
If Zelle1 Is Nothing Or Zelle2 Is Nothing Then
    MsgBox "Eine Eingabe konnte nicht gefunden werden."
    Exit Sub
    
End If

Ergebnis = Zelle2.Offset(0, 1).Value
Select Case Zelle1.Offset(0, 2).Value
    Case "Europa": Ergebnis = Ergebnis + 1
    Case "Amerika": Ergebnis = Ergebnis + 2
    Case Else
End Select

MsgBox Format(Ergebnis, "DD.MM.YYYY")
    
End Sub
es muss aber sichergestellt sein, dass jeder Text auch bei jedem Fahrzeug vorkommt.
denn wenn du nach "Fiat2" und "Abnahme" suchst und Fiat2 keine Abnahme hat sondern erst wieder Fiat3, wird die Abnahme von Fiat3 gefunden.

Gruß Daniel

Betrifft: AW: Excel VBA - String Suche
von: Marcel Fischer
Geschrieben am: 29.09.2020 08:23:04

Hallo Daniel

Besten Dank für deine Hilfe. Ich habe den Code entsprechend in mein Excel hineinkopiert, jedoch erscheint mir bei Set Zelle1 ein "Laufzeitfehler '13': Typen unverträglich". Kann mir da jemand weithelfen wieso dies der Fall ist?

Gruss Marcel

Betrifft: AW: Excel VBA - String Suche
von: Daniel
Geschrieben am: 29.09.2020 09:34:37

Hi
bei Set Zelle1 darf dieser Fehler eigentlich nicht erscheinen
bei Set Zelle2 kommt der Fehler, wenn du beim Suchbegriff für der das Auto einen nicht vorhandene Wert eingegeben hast.
hier müsstest du dann die Prüfung mit IF Zelle1 is Nothing vorziehen und für jedes .FIND separat durchführen.
Gruß Daniel

Betrifft: AW: Excel VBA - String Suche
von: Marcel Fischer
Geschrieben am: 29.09.2020 09:43:53

Hallo Daniel

Der Fehler liegt daran das der Suchbegriff genau den String abbilden muss. Das heisst "Fiat2" generiert den Fehler, "Auto Fiat2" wiederum nicht. Wie kann ich den Suchbegriff an justieren das es für "Fiat2" funktioniert?

Gruss Marcel

Betrifft: AW: Excel VBA - String Suche
von: Daniel
Geschrieben am: 29.09.2020 09:54:46

Hi
Jokerzeichen mit eingeben "*Fiat2*"
oder in der Suche von LookAt:=xlwhole auf LookAt:=xlpart umstellen.
Gruß Daniel

Betrifft: AW: Excel VBA - String Suche
von: Marcel Fischer
Geschrieben am: 29.09.2020 10:22:37

Super funktioniert einwandfrei.

Gruss Marcel

Betrifft: AW: Excel VBA - String Suche
von: Werner
Geschrieben am: 29.09.2020 09:44:17

Hallo,

die Suche mit Find müsste mit LookAt:=xlPart durchgeführt werden, da offensichtlich nicht nur Fiat1 in der Zelle steht.
Sub Schaltfläche1_Klicken()
Dim strSuche1 As String, strSuche2 As String, raFund As Range, i As Long

With Worksheets("Tabelle1")
    strSuche1 = InputBox("Suchtext 1")
    If strSuche1 = vbNullString Then Exit Sub
    strSuche2 = InputBox("Suchtext 2")
    If strSuche2 = vbNullString Then Exit Sub
    
    Set raFund = .Columns("A").Find(what:=WorksheetFunction.Proper(strSuche1), _
    LookIn:=xlValues, lookat:=xlPart)
    If Not raFund Is Nothing Then
        For i = raFund.Row To raFund.Row + 4
            If .Cells(i, "A") = WorksheetFunction.Proper(strSuche2) Then
                MsgBox IIf(raFund.Offset(, 2) = "Amerika", .Cells(i, "B") + 2, .Cells(i, "B") +  _
1)
                Exit For
            End If
        Next i
    Else
        MsgBox "Der Suchbegriff " & strSuche1 & " wurde nicht gefunden."
    End If
End With

Set raFund = Nothing
End Sub
Gruß Werner