Excel 2007: Zellenwert suchen und markieren
Hallo Forumuser,
Ich habe ein Problem mit Excel.
Ich versuche in einer Tabelle nach einem bestimmten Datum zu suchen, sozusagen zur Überprüfung. Ich hab dazu ein Makro selbst programmiert nur leider hört es nach einem gefundenen treffe auf weiter zu suchen, obwohl mein Suchkriterium öfters zu finden ist. Vielleicht kann mir jemand die passende Schleife dazu bauen. :D
Vielen Dank im voraus

3 Antworten
Dieses Exit For
sorgt dafür, dass das Makro aus der Schleife springt. Das solltest du rausmachen. (ist sowieso ein Programmierstil, den man sich nicht angewöhnen sollte. Bei Schleifen ohne feste Anzahl ist Do While
oder Do Until
besser.) Und bei der Gelegenheit kannst du auch gleich dieses i = i + 3
rausschmeißen und stattdessen direkt in die For-Funktion einbauen, also For i = 6 to 100 Step 3
Tschuldige das ich nochmal stören muss aber ich glaub ich hab es nicht richtig übernommen :(
hier der Code
Sub Makro1() On Error GoTo fehler
Dim strName As String Dim strString As String Dim zelle As Range
Set zelle = Selection strString = zelle.Value
' For i = 6 To 100 Step 3 If Cells(zelle.Row, i) Like strString Then MsgBox "Gefunden!" Cells(zelle.Row, i).Select ' Nach dem es diese messagebox ausgiebt sucht es nicht weiter obwohl das Datum öffters in der Tabelle vorkommt.
End If
' Next i
' GoTo ende ' fehler: MsgBox "Verarbeitungsfehler!"
' ende:
End Sub
Jetzt hast du die ganze Schleife auskommentiert. Du solltest nur das "Exit For" rausnehmen
Sub Makro1() On Error GoTo fehler
Dim strName As String
Dim strString As String
Dim zelle As Range
Set zelle = Selection
strString = zelle.Value
For i = 6 To 100 Step 3
If Cells(zelle.Row, i) Like strString Then
MsgBox "Gefunden!"
Cells(zelle.Row, i).Select
End If
Next i
End Sub
ich würde noch eine "Festhalte-Aktion" einfügen, zB nach Cells(zelle.Row, i).Select
ein
Debug.print Selection.address
Dann kannst Du im Fenster die Einträge ALLE finden und dort sogar kopieren. sonst rauscht das Makro vorüber und Du weißt hinterher erst nichts.
Es ginge natürlich auch, einen Bereich zu definieren und als Liste anzulegen, aber das ist etwas komplizierter.
Oder Du lässt die gefundenen Zellen farbig markieren mit dem Befehl:
activecell.patternindex = 3
activecell.patterncolorindex = 4
(Muster-/farben kannst Du hinterher wieder auf weiß setzen, ohne die Hintergrundfarben zu beeinflussen, allerdings verschwinden dann die Gridlines, die müssten dann durch ein Rahmengitter ersetzt werden
"einen Bereich zu definieren und als Liste anzulegen, aber das ist etwas komplizierter":
zB: ein Blatt Kontrolle anlegen und dann den Befehl einbauen:
Worksheets("Kontrolle").Range("A65000").End(xlup).offset(1, 0) = Selection.address
Das geht (nur virtuell !!!) zur Zelle A6500 (also fast ganz nach unten im alten xls-Blatt) und dann wieder hoch bis zur untersten gefüllten Zelle, und von dort aus dann eins nach unten versetzt (also in die erste leere Zelle) schreibt es die Adresse der vom Makro gefundenen -immer noch aktiven- Zelle -beliebig oft.
Und wenn Du external:=true anfügst, setzt es vor die Adresse noch den Pfad
Weiteren Phantasien sind keine Grenzen gesetzt.
Ich hoffe, ich hab in dieser "Trockenübung keinen Fehler reingebracht!
Wenn du nur prüfen willst, ob bzw. wie oft ein bestimmter Wert/Datum im einer EXCEL-Spalte vorhanden ist, würde es dann nicht ausreichen,danach zu suchen (strg-f) oder zu filtern - ohne VBA-Makro?
da hast Du auch recht! (wenn ich mich recht erinnere: Du machst Fortschritte! ernsthaft, kein Spott!)
Du verlässt die For-Schleife ja auch nach einem Treffer.
Kannst du mir auch sagen wie ich diese For Exit umgeh ? muss ich es einfach raus streichen und fretig ?
Vielen dank für die schnelle Hilfe.
Gruß rico