Excel VBA suchen, kopieren und Zelle angeben?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

So GANZ verstehe ich nicht, was Du genau willst.

Ich habe erstmal auf die Schnelle etwas "zusammen gestrickt", und Du kannst mir sagen, was Du anders haben möchtest, oder es vlt. auch selber im Code anpassen.

(kopiert habe ich den String nach Spalte B, und das "angeben" übernimmt eine Msgbox):

Sub Suche123()
Const Suchstring As String = "123!"
Dim Zelle As Range
Dim loLetzteA As Long
Dim loLetzteB As Long

loLetzteA = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)

For Each Zelle In Range(Cells(1, 1), Cells(loLetzteA, 1))
    If InStr(Zelle, Suchstring) > 0 Then
        loLetzteB = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows.Count)
        MsgBox (Zelle.Address)
        Zelle.Copy
        Cells(loLetzteB + 1, 2).PasteSpecial xlPasteValues
    End If
Next Zelle
End Sub

Genau, was Du suchst, habe ich nicht, aber vielleicht hilft Dir auch das weiter:

Ich habe vor längerer Zeit ein Makro gebastelt, das von unten her durchsucht, und zwar soviele Spalten, wie in der Zeile markiert sind. Als Vorgabe für die Suche wird der Eintrag der aktiven Zelle übernommen (steuerbar über Auswahl und ggf enter drücken, dabei verlagert sich die aktive Zelle). Man kann "nur suchen" oder "suchen und ersetzen".

In der jetzt für dich überarbeiteten Fassung trägt es Setzungen, Findungen und Veränderte Ergebnisse samt Adressen als Zeichenkette nach H1, nicht wie Du wolltest, nach B1, weil sonst evtl am Ende der Suche diese Einträge stören.

Betrachte das Makro nicht als Vorbild in Programmierkunst, aber es tut mir gute Dienste bei meiner Kassenbuchführung und vielleicht hilft es auch Dir. Bei Rückfragen melde Dich, ich werde die Frage noch eine Zeitlang beobachten. Hier das Makro:

Option Explicit
Sub Suchen_in_Fo_Cells_rueckwaerts_red() 'Vorgabe ist: Inhalt aktive Zelle in Auswahl Auswahl bis zu 3 Spalten breit?
Dim c As Integer, len1 As Integer, y, Gesucht As String, Ersatz As String, such_in As Range, Dok As String
Dim AC As Range, Ausgangsmarkierung 'AC=ActiveCell
Dim activi 'nicht nötig: AC As Range, AC As Object, geht aber mit beidem, Set notwendig!
Set AC = ActiveCell:     Ausgangsmarkierung = Selection.Address '+letzte µ-Zeile funktioniert zwar, würde aber Sucherfolg zunichte machen!
                     Set such_in = Range(Cells(1, Selection.Column), Cells(Selection.Row, Selection.Column _
                       + Selection.Columns.Count - 1)) 'nicht schon hier select ? damit activecell bleibt!
   Gesucht = InputBox("gesucht in " & such_in.Address, "rückwärts suchen:  was?", _
                     ActiveCell.Value)   '
          If Gesucht = "" Then End
                       such_in.Select
   Ersatz = InputBox(Gesucht & " ersetzen durch: " & Chr(10) _
   & "(bei nur suchen leer lassen und ok drücken)", " rückwärts ersetzen in " & such_in.Address, "")
Dok = "suche:" & Gesucht & " in " & such_in.Address & " Start: " & AC.Address & " FINDUNGEN: " 'Auflistung der Aktivitäten
   For c = Selection.Cells.Count - Selection.Columns.Count To 1 Step -1
      Selection.Cells(c).Activate   '
      If InStr(1, Selection.Cells(c).Formula, Gesucht, vbTextCompare) > 0 Then
                  len1 = InStr(1, Selection.Cells(c).Formula, Gesucht, vbTextCompare)
                  'findet Anzeige nur, wenn Formula=Value, findet durch Formeln erzeugte Werte hier nicht!
                  'auch nicht zB B1, wenn erzeugt durch ="B"&"1" oder ="B"&RUNDEN(ZUFALLSZAHL()*20;0)
                  
                  y = MsgBox(Gesucht & "  wurde gefunden in " & ActiveCell.Address _
                  & " . Ersetzen durch `" & Ersatz & "´ ?" & Chr(10) & "nein sucht weiter, abbrechen beendet" _
                  , vbYesNoCancel, "Ersetzen rückwärts in " & such_in.Address)
                                                'Debug.Print "ersetzen?: y= " & y
activi = activi & Selection.Cells(c).Address & ": " & Selection.Cells(c).Formula
                  If y = vbCancel Then GoTo Beendigung                  ' .Formula <=> .Value , Value geht bei Formeln auch nicht
                  If y = vbYes Then Selection.Cells(c).Formula = Left(Selection.Cells(c).Formula, len1 - 1) _
                     & Ersatz & Mid(Selection.Cells(c).Formula, len1 + Len(Gesucht), 33333)
If y = vbYes Then activi = activi & " => " & Selection.Cells(c).Formula & " —— " 'einzeilige if-Var.
      Else
      End If
   Next
Beendigung:
Range("H1") = Dok & activi
'End 'wenn gefundene Zelle bei Ende aktiv bleiben soll. Wenn Ablauf und Ergebnis in Zelle festgehalten, auskommentieren
Range(Ausgangsmarkierung).Select:  AC.Activate
End Sub

 

VBA Excel überprüfen, ob Spalte gruppiert

Hallo Zusammen,

Wie kann ich überprüfen, ob eine Spalte gruppiert ist in VBA? Die gruppierten Spalten möchte ich überspringen

Danke

...zur Frage

Excel: Tabellenblatt per Makro kopieren und umbenennen?

Hallo nochmal

Ich habe vorhin bereits eine ähnliche Frage gestellt. Jetzt hat sich eine weitere Frage ergeben. Ich habe ein Excelfile mit 2 Tabellenblättern (Inhalt und Template). Beim Ausführen eines Makros auf der Seite "Inhalt" soll nun folgendes geschehen:

Tabellenblatt "Template" wird kopiert. Dieses neue Blatt wird nach dem Inhalt der Zelle C8 des Tabellenblatts "Inhalt" benannt.

Wäre super, wenn mir jemand ein VBA dazu machen könnte :) Vielen Dank im Voraus!

...zur Frage

Excel 2010: Silbentrennung

Ist bei Excel 2010 eine Silbentrennung möglich? Also wenn ein Satz in einer Zelle durch Zeilenumbruch "passend gemacht wird", dass die Wörter an einer sinnvollen Stelle getrennt werden?

Bei Word geht das, aber ich find bei Excel nichts!

...zur Frage

Excel VBA. Wie kann ich eine Zelle in ein anderes Tabellenblatt in eine bestimmte Spalte einfügen?

Wie kann ich zum Beispiel aus Tabellenblatt Zelle A11 Werte in Tabellenblatt 2 kopieren und dabei Spaltte "B" hineinkopieren? Außerdem soll Excel immer in die nächste frei Zeile die Werte hineinkopieren.

...zur Frage

Wieso gilt ein Excel VBA Makro nur für ein Tabellenblatt?

...zur Frage

Werte untereinander in Excel erfassen - VBA

Frage an die Excel Profis und VBA Experten. Die Aufgabenstellung baut aufeinander auf.

  1. Aufgabenstellung: Zelle A1 soll als Eingabefeld in Excel dienen. Alle Werte, die in A1 eingegeben werden, sollen einfach untereinander ausgegeben werden, also in a2, a3, a4 usw. Die Cursormarkierung (damit meine ich die schwarze Umrahmung der aktiven Zelle) bleibt aber in A1.

  2. Aufgabenstellung: Aufbauend auf Aufgabenstellung 1 soll nun nachdem in A1 ein Wert eingegeben wurde, der Wert wie gehabt in A2 erscheinen. Die schwarze Umrahmung soll aber jedoch zunächst in B2 erscheinen um einen weiteren Wert einzugeben. Erst nach Eingabe eines Wertes in B2 soll die Umrahmung wieder in A1 springen, damit ein nächster Wert eingegeben werden kann, der dann in Zelle A3 erscheint. Dann springt die Cursormarkierung in B3, um einen Wert einzugeben. Danach wieder in A1 usw.

  3. Aufgabenstellung: Aubauend auf Aufgabenstellung 2 sollen die Werte, die in den Zellen der Spalte B eingegeben werden, mit den Werten der Spalte A im Reiter "Tabelle2" verglichen werden. Sofern der eingegebene Wert in der Spalte B mit denen der Spalte A (Reiter Tabelle2) übereinstimmt, soll Excel ein Fenster öffnen, in dem "Wert gefunden" steht.

Ist das in Excel 2003 per VBA für alle 3 Aufgabenstellungen möglich?

...zur Frage

Was möchtest Du wissen?