3.2k Aufrufe
Gefragt in Anwendungen(Java,C++...) von
Hallo zusammen,

ich bin ein absoluter vba anfänger, ich mache hier ein praktikum und soll mich in vba schlau machen. Meine erste aufgabe ist es eine Tabelle zu durchsuchen und sobald in der Tabelle z.B. x steht, soll die ganze Zeile kopiert werden und in einem neuen Tabellenblatt ausgegeben werden.
Wie mache ich das? Ich es bisher mit einer if funktion probiert und wollte da eine for schleife integrieren. Aber wie bekomme ich es hin, dass er jede zeile durchsucht?
Ich danke euch schon mal im voraus, für euch scheint die Frage wahrscheinlich lächerlich, aber jeder hat ja mal angefangen ;))

Liebe Grüße
Sarah

P.S.: Für Literaturempfehlungen bin ich auch sehr dankbar

4 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Sarah,

das könnte man z.B. mit nachfolegndem Makro realisieren. Hier wird das aktuelle Tabellenblatt nach dem Text, der in dem Eingabefenster eingetragen wurde, durchsucht. Bei Übereinstimmungen wird die gesamte Zeile der Übereinstimmung in ein neu erzeugtes Tabellenblatt kopiert.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Duplikate_finden_und_kopieren()
Dim rngSuchbereich As Range
Dim strAddresse As String
Dim objAktSheet As Object
Dim objNewSheet As Object
Dim varSuchtext As String

varSuchtext = InputBox("Bitte Scuchbegriff eintragen")

If varSuchtext = "" Or varSuchtext = False Then Exit Sub

'Tabellenblatt "Auswertung" löschen
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Auswertung").Delete
Application.DisplayAlerts = True
On Error GoTo 0


Set objAktSheet = ActiveSheet
'Neues Tabellenblatt mit denm Namen "Auswertung" anlegen
Set objNewSheet = Application.Sheets.Add
objNewSheet.Name = "Auswertung"

'Bereich durchsuchen und bei Übereinstimmung Zeile kopieren und in Blatt "Auswertung" einfügen
With objAktSheet.Range("A1:IV65536")
Set rngSuchbereich = .Find(What:=varSuchtext, LookIn:=xlValues)
If Not rngSuchbereich Is Nothing Then
strAddresse = rngSuchbereich.Address
Do
objAktSheet.Rows(rngSuchbereich.Row).Copy _
objNewSheet.Cells(objNewSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
Set rngSuchbereich = .FindNext(rngSuchbereich)
Loop While Not rngSuchbereich Is Nothing And rngSuchbereich.Address <> strAddresse
End If
End With

Set objAktSheet = Nothing
Set objNewSheet = Nothing

End Sub

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo,

ich nochmal, Leider ist mir beim Formatieren des Codes für diesen Beitrag ein Fehler unteerlaufen. Daher hier nochmal das Makro:

Option Explicit

Sub Duplikate_finden_und_kopieren()
Dim rngSuchbereich As Range
Dim strAddresse As String
Dim objAktSheet As Object
Dim objNewSheet As Object
Dim varSuchtext As String

varSuchtext = InputBox("Bitte Scuchbegriff eintragen")

If varSuchtext = "" Or varSuchtext = False Then Exit Sub

'Tabellenblatt "Auswertung" löschen
On Error Resume Next
Application.DisplayAlerts = False
Sheets("Auswertung").Delete
Application.DisplayAlerts = True
On Error GoTo 0


Set objAktSheet = ActiveSheet
'Neues Tabellenblatt mit denm Namen "Auswertung" anlegen
Set objNewSheet = Application.Sheets.Add
objNewSheet.Name = "Auswertung"

'Bereich durchsuchen und bei Übereinstimmung Zeile kopieren und in Blatt "Auswertung" einfügen
With objAktSheet.Range("A1:IV65536")
Set rngSuchbereich = .Find(What:=varSuchtext, LookIn:=xlValues)
If Not rngSuchbereich Is Nothing Then
strAddresse = rngSuchbereich.Address
Do
objAktSheet.Rows(rngSuchbereich.Row).Copy _
objNewSheet.Cells(objNewSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
Set rngSuchbereich = .FindNext(rngSuchbereich)
Loop While Not rngSuchbereich Is Nothing And rngSuchbereich.Address <> strAddresse
End If
End With

Set objAktSheet = Nothing
Set objNewSheet = Nothing

End Sub


MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
Hallo Oliver,

erst einmal vielen lieben Dank, dass du dich meinem Problem angenommen hast. Ich werde es direkt am Montag ausprobieren und dir dann nochmal Rückmeldung geben.

Schönen Sonntag,
Grüße

Sarah
0 Punkte
Beantwortet von
Hallo Oliver,

vielen Dank nochmal, es funktioniert bestens.
Auch danke für den Verweis auf deine Homepage, die ist ja wirklich super.

Grüße
Sarah
...