Makro, Suchfunktion, Zelle nach oben bis Wert
Markus
Ich bin absoluter Excel und VBA Neuling, aber bring mir das ganz gerade ein bisschen bei, indem ich Suchmaschinen um Rat frage. Diese geniale Seite hat mir auch schon oft weiter geholfen, nur bei meinem folgenden Problem komm ich nicht weiter:
Ich habe ein Excel-Sheet in folgender Form:
In A4 steht "Haus 1", in B5 bis B10 stehen in jeder Zelle etwas (z.B. B5=TV, B6=Radio, B7=Bett,...).
In A 14 steht "Haus 2", in B15 bis B17 stehen wieder in jeder Zelle etwas (z.B. B15=Tisch, B16=TV,..).
Jetzt möchte ich ein Suchfeld (eine Zelle), in das ich z.b. TV eingebe, dann soll eine MessageBox kommen, die mir bei der Eingabe von "TV" nach obigem Beispiel die Werte "Haus 1" und "Haus 2" ausgibt (=Haus 1 und Haus 2 haben ein TV). Wenn kein Haus ein TV hat, soll in der MessageBox ein Satz stehen wie: "Nichts gefunden!" .
Ich habe schon ein Makro gebastelt, das dem ganzen sehr nahe kommt, nur gibt es noch 2 Probleme:
1. Als Ergebnis der Suche (z.B. nach "TV") gibt mir das Makro den Wert der Zelle links neben der Zelle, in der "TV" steht. Das Makro soll aber ab der Zelle mit dem gefundenen Wert eine Zelle nach links gehen und dann so lang nach oben, bis eine Zelle mit einem Wert kommt und diesen Wert ausgeben. (So dachte ich mir könnte man das lösen...)
2. Wenn die Suche den eingegebenen Wert nicht findet, gibt mir die MessageBox nicht meinen gewollten Satz aus, sondern einfach nichts ("Leerzeichen").
[Noch schöner wäre es natürlich wenn er mir, wenn er nichts findet, eine eigene MessageBox ausgibt, mit einem eigenen Text und Error-Symbol. (Sowas: MsgBox "Es wurde kein Haus gefunden! Bitte beachten Sie die genaue Schreibweise der Einrichtung. " & Chr(13) & Chr(13), vbOKOnly + vbCritical, "Ergebnisse der Suche nach " & myB).]
Hier also mein derzeitiges Makro: (In AG1 wird der zu suchende Wert eingegeben)
Sub finde()
Dim myB As String
Dim myA As String
Dim Counter As Integer
Counter = 1
myB = Range("AG1")
For Counter = 1 To ActiveSheet.UsedRange.Rows.Count
If ActiveSheet.Range("B" & Counter) = myB Then
myA = myA & Chr(10) & ActiveSheet.Range("A" & Counter)
If ActiveSheet.Range("B" & Counter) myB Then
myA = "Nichts gefunden!"
End If
End If
Next
MsgBox "Folgende Häuser haben die Einrichtung " & myB & ":" & Chr(13) & Chr(13) & myA, _
vbOKOnly + vbInformation, "Ergebnisse der Suche nach " & myB
End Sub
Vielen Dank schonmal für eure Hilfe!
PS: Falls es Verständnisprobleme geben sollte, dann kann ich die Datei auch noch hochladen.