Excel 2007: Zellenwert suchen und markieren

Mein Programmcode als Screen - (Suche, Microsoft Excel, VBA)

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

RicoIT 
Fragesteller
 07.03.2014, 10:26

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

0
daCypher  07.03.2014, 10:37
@RicoIT

Ja, einfach weglöschen. Das hat dann aber auch den Effekt, dass sofort der nächste Eintrag gesucht wird, sobald du diese "Gefunden"-Meldung wegklickst. Also er bleibt nicht stehen und wartet, bis du was bearbeitet hast.

0
RicoIT 
Fragesteller
 07.03.2014, 11:08
@RicoIT

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

0
daCypher  07.03.2014, 11:35
@RicoIT

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
1
Iamiam  09.03.2014, 22:39
@daCypher

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

0
Iamiam  09.03.2014, 22:51
@Iamiam

"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!

0
RicoIT 
Fragesteller
 11.03.2014, 09:39
@Iamiam

Vielen vielen Dank ihr habt mir sehr geholfen :)

bis zum nächsten mal....

0

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?

Iamiam  09.03.2014, 23:24

da hast Du auch recht! (wenn ich mich recht erinnere: Du machst Fortschritte! ernsthaft, kein Spott!)

0

Du verlässt die For-Schleife ja auch nach einem Treffer.