Supportnet / Forum / Tabellenkalkulation
Excel Makro
Frage
Ich habe bis jetzt noch etwas mit Makros gemacht. Könnte mir jemand helfen, einen Makro zu erstellen, der etwas nur in einer spezifischen Spalte sucht (also eine benutzdefinierte Suchfunktion)?
Danke.
Antwort 1 von nighty
hi Ilia :)
excel bietet selber schon sehr viel,unter anderem auch eine starke suchfunction unter
bearbeiten/suchen anwaehlbar ist.probiere auch mal den macrorecorder.
oder mit vorkenntnissen in vb hier etwas zum experimentieren :)
gruss nighty
excel bietet selber schon sehr viel,unter anderem auch eine starke suchfunction unter
bearbeiten/suchen anwaehlbar ist.probiere auch mal den macrorecorder.
oder mit vorkenntnissen in vb hier etwas zum experimentieren :)
gruss nighty
Sub makro01()
Rem es wird wie unten auch zu sehen ist in spalte a gesucht
Rem von zeile 1 bis 1000
Rem hier der suchbegriff
wert01 = "micha"
Set c = Worksheets(1).Range("a1:a1000").Find(wert01, LookIn:=xlValues)
If Not c Is Nothing Then
Rem weiterer fund des suchbegriffs und dessen behandlung
firstAddress = c.Address
Do
Set c = Worksheets(1).Range("a1:a1000").FindNext(c)
If Not c Is Nothing And c.Address <> firstAddress Then
Rem weiterer fund des suchbegriffs und dessen behandlung
End If
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End SubAntwort 2 von coros
Hi,
mit einem Hallo am Anfang und einem Gruß am Ende würde der Beitrag gleich viel netter aussehen.
Hier jetzt auch eine Lösung von mir. Nachfolgenden Code in ein StandardModul kopieren.
Beim Starten des Makros erscheint ein Eingabefenster, in dem ein Begriff eingegeben werden muss. Danach wird ein Fenster geöffnet, welches die Anzahl der gefundenen Übereinstimmungen anzeigt und es wird die erste gefundene Übereinstimmung markiert. Nach einem Klick auf einen OK Button wird die nächste Übereinstimmung markiert. Gesucht wird in der gesamten Exceltabelle. Soll nur eine Spalte durchsucht werden, muss in der Zeile
Set erg = Range("A1:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
und in Zeile
Set erg = Range("A1:IV65536").FindNext(erg)
die Zellbezeichnung IV65536 gegen eine andere Spaltenbezeichnung getauscht werden.
Da Du ja geschrieben hast, dass Du Dich nicht mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.
1. Markiere die Anweisung aus diesem Beitrag und Kopiere (Strg c) diesen.
2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücke die Tastenkombination Alt F11
3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle) und klicke doppelt auf diesen Eintrag
4. Klicke danach nacheinander in der Menüleiste auf Einfügen => Modul.
5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.
Aufrufen könnte man solch ein Makro über eine Schaltfläche. Da ich nicht weiß, ob Du weißt, wie man eine Befehlsschaltfläche in ein Tabellenblatt einfügst, kommt hier eine kurze Anweisung.
1. Gehe in der Menüleiste auf Ansicht => Symbolleiste => Steuerelement-Toolbox
2. Klicke auf die 6.Schaltfläche von links (Schaltflächenkommentar: Befehlsschaltfläche)
3. Positioniere die Schaltfläche in Deinem Tabellenblatt und passe gegebenenfalls die Größe an.
4. Klicke in der Symbolleiste auf die 3.Schaltfläche von links (Schaltflächenkommentar: Code anzeigen).
5. In das geöffnete Fenster schreibst Du zwischen die Texte “Private Sub CommandButton1_Click()“ und “End Sub“ in die Leerzeile Call Makroname oder nur der Makroname.
6. Klicke in der Symbolleiste auf die erste Schaltfläche von links um den Entwurfmodus zu beenden (Schaltflächenkommentar: Entwurfmodus beenden).
Wenn Du alles richtig gemacht hast, sollte das Makro, nachdem Du die Schaltfläche betätigt hast, abgearbeitet werden.
Du solltest zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.
Ich hoffe, Du kommst klar. Be Fragen, melde Dich einfach noch mal.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
mit einem Hallo am Anfang und einem Gruß am Ende würde der Beitrag gleich viel netter aussehen.
Hier jetzt auch eine Lösung von mir. Nachfolgenden Code in ein StandardModul kopieren.
Sub Suchen()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes oder kompletten Suchbegriff eingeben. Groß-/Kleinschreibung ist egal.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
Set erg = Range("A1:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox "Suchbegriff wurde nicht gefunden! Es ist aber nicht 100% sicher, dass der gesuchte Begriff sich nicht in der Tabelle befindet. Überprüfen Sie daher bitte nochmal die Schreibweise und geben den Suchbegriff erneut ein, oder suchen Sie den Begriff manuell in der Tabelle."
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(1 To index1)
gefunden(index1) = erg.Address
Set erg = Range("A1:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
Range(gefunden(index2)).Select
ActiveWindow.ScrollRow = Selection.Row
ActiveWindow.ScrollColumn = Selection.Column
If MsgBox(CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End If
End SubBeim Starten des Makros erscheint ein Eingabefenster, in dem ein Begriff eingegeben werden muss. Danach wird ein Fenster geöffnet, welches die Anzahl der gefundenen Übereinstimmungen anzeigt und es wird die erste gefundene Übereinstimmung markiert. Nach einem Klick auf einen OK Button wird die nächste Übereinstimmung markiert. Gesucht wird in der gesamten Exceltabelle. Soll nur eine Spalte durchsucht werden, muss in der Zeile
Set erg = Range("A1:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
und in Zeile
Set erg = Range("A1:IV65536").FindNext(erg)
die Zellbezeichnung IV65536 gegen eine andere Spaltenbezeichnung getauscht werden.
Da Du ja geschrieben hast, dass Du Dich nicht mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.
1. Markiere die Anweisung aus diesem Beitrag und Kopiere (Strg c) diesen.
2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücke die Tastenkombination Alt F11
3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle) und klicke doppelt auf diesen Eintrag
4. Klicke danach nacheinander in der Menüleiste auf Einfügen => Modul.
5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.
Aufrufen könnte man solch ein Makro über eine Schaltfläche. Da ich nicht weiß, ob Du weißt, wie man eine Befehlsschaltfläche in ein Tabellenblatt einfügst, kommt hier eine kurze Anweisung.
1. Gehe in der Menüleiste auf Ansicht => Symbolleiste => Steuerelement-Toolbox
2. Klicke auf die 6.Schaltfläche von links (Schaltflächenkommentar: Befehlsschaltfläche)
3. Positioniere die Schaltfläche in Deinem Tabellenblatt und passe gegebenenfalls die Größe an.
4. Klicke in der Symbolleiste auf die 3.Schaltfläche von links (Schaltflächenkommentar: Code anzeigen).
5. In das geöffnete Fenster schreibst Du zwischen die Texte “Private Sub CommandButton1_Click()“ und “End Sub“ in die Leerzeile Call Makroname oder nur der Makroname.
6. Klicke in der Symbolleiste auf die erste Schaltfläche von links um den Entwurfmodus zu beenden (Schaltflächenkommentar: Entwurfmodus beenden).
Wenn Du alles richtig gemacht hast, sollte das Makro, nachdem Du die Schaltfläche betätigt hast, abgearbeitet werden.
Du solltest zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.
Ich hoffe, Du kommst klar. Be Fragen, melde Dich einfach noch mal.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 3 von want2cu
Hallo Ilia,
2 der VBA-Experten haben dir ja schon eine tolle Lösung geboten.
Als Alternative kann die "ganz normale Suchfunktion" auch nur in einer bestimmten SPalte suchen und/oder ersetzen, wenn nur diese SPalte markiert ist. Im Prinzip kann man also die Funktionen Suchen/Ersetzen auf jeden beliebigen markierten Tabellenbereich beschränken.
CU
want2cu
2 der VBA-Experten haben dir ja schon eine tolle Lösung geboten.
Als Alternative kann die "ganz normale Suchfunktion" auch nur in einer bestimmten SPalte suchen und/oder ersetzen, wenn nur diese SPalte markiert ist. Im Prinzip kann man also die Funktionen Suchen/Ersetzen auf jeden beliebigen markierten Tabellenbereich beschränken.
CU
want2cu

