HERBERS Excel-Forum - das Archiv

Thema: VBA Suchen, Kopieren, Einfügen

VBA Suchen, Kopieren, Einfügen
Karutahi
Hallo,

leider komme ich mit Chat GPT und Gemini diesmal nicht weiter.
Auf Tabelle 4 werden mehrere Informationen geschrieben, ab E2 - K. Das ganze wir noch länger und vermutlich bei AL enden.
Das funktioniert bereits und mir werden momentan sieben Zellen mit Information gefüllt.
Kommt ein neuer Datensatz hinzu, wird dies in E3 -K3 fortgesetzt, dann E4 - K4 usw.

Momentan habe ich auf Tabellenblatt 1 im Bereich D31-D39 die Möglichkeit meine Suchbegriffe einzugeben.
Meine Suche möchte ich mit einem CommandButton starten
Nun möchte ich das wenn eine Zelle in D31-D39 über einen Inhalt verfügt, das dieser in Tabelle4 in E2 - K2000 gesucht wird(2000 darf auch gerne unendlich sein).
Und wenn in einer Zeile alle Suchbegriffe gefunden wurden, sollen aus dieser Zeile (momentan) die Zellen F, I und K kopiert werden.
Diese kopierten Zellen aus Tabelle4 sollen nun der Reihe nach in Tabelle 1 beginnend ab F31 eingefügt werden.
Werden in Tabelle 4 die Suchbegriffe erneut in einer Zeile gefunden, sollen auch hier wieder die Zellen F, I und K dieser Zeile kopiert werden und
nun beginnend ab F32 eingefügt werden, usw.

Von der KI habe ich momentan das:
Private Sub CommandButton2_Click()






Dim wsNummer As Worksheet, wsArtikel As Worksheet
Dim nummerRange As Range, artikelRange As Range
Dim nummerCell As Range, artikelRow As Range
Dim i As Integer, j As Integer
Dim startRow As Integer
Dim foundAll As Boolean
Dim kopierZeile As Integer

' Setze die Arbeitsblätter
Set wsNummer = ThisWorkbook.Sheets("Nummer")
Set wsArtikel = ThisWorkbook.Sheets("Artikel")

' Definiere den Bereich für die Suchbegriffe in Tabelle 1
Set nummerRange = wsNummer.Range("D31:D39")


' Schleife über jeden Suchbegriff in Tabelle 1
For Each nummerCell In nummerRange
' Setze die Variable auf "False" für jeden neuen Suchbegriff
foundAll = False

' Durchlaufe jede Zeile in Tabelle 4
For Each artikelRow In wsArtikel.Range("E2:AL" & wsArtikel.Cells(wsArtikel.Rows.Count, "E").End(xlUp).Row).Rows
' Setze die Variable auf "True" für jede neue Zeile in Tabelle 4
foundAll = True

' Überprüfe, ob alle Suchbegriffe in der aktuellen Zeile gefunden wurden
For i = 1 To 33 ' Spalten E bis AL in Tabelle 4
If Not IsError(Application.Match(nummerCell.Value, artikelRow.Columns(i), 0)) Then
' Wert gefunden
Else
' Wert nicht gefunden
foundAll = False
Exit For ' Beende die Schleife, da ein Wert nicht gefunden wurde
End If
Next i

' Wenn alle Suchbegriffe gefunden wurden
If foundAll Then
' Kopiere die relevanten Zellen in Tabelle 1
kopierZeile = wsNummer.Cells(wsNummer.Rows.Count, "F").End(xlUp).Row + 1
wsNummer.Cells(kopierZeile, "F").Value = artikelRow.Cells(1, "F").Value
wsNummer.Cells(kopierZeile, "G").Value = artikelRow.Cells(1, "I").Value
wsNummer.Cells(kopierZeile, "H").Value = artikelRow.Cells(1, "K").Value
wsNummer.Cells(kopierZeile, "I").Value = artikelRow.Cells(1, "M").Value
wsNummer.Cells(kopierZeile, "J").Value = artikelRow.Cells(1, "O").Value
wsNummer.Cells(kopierZeile, "K").Value = artikelRow.Cells(1, "Q").Value
kopierZeile = kopierZeile + 1 ' Gehe zur nächsten Zeile in Tabelle 1
End If
Next artikelRow
Next nummerCell
End Sub


Hier passiert leider nichts. Es kommt aber auch kein Fehler.
VBA kann ich leider nur grob editieren wenn es funktioniert. Selbst programmieren kann ich es leider nicht.

Schon einmal danke im vorraus für jede Hilfe :)
AW: VBA Suchen, Kopieren, Einfügen
Oberschlumpf
Hi,

zeig bitte per Upload eine Bsp-Datei mit genügend Bsp-Daten (vor allem in Tabelle4) in den richtigen Zeilen/Spalten wie auch im Original.

Und die Suchwerte aus den Zellen D31-D39 müssen wirklich alle in einer Zeile in Tabelle4 enthalten sein?
Ist es egal, in welchen Zellen die Werte aus D31-D39 gefunden werden, oder...
...muss z Bsp Wert aus D31 definitiv in Spalte K oder so enthalten sein?

Bitte alle Fragen beantworten.

Ciao
Thorsten
AW: VBA Suchen, Kopieren, Einfügen
Yal
Hallo Markus,

die kunstliche Kollegen sind nicht ganz einfach ihren Denkweise...

Private Sub CommandButton2_Click()

Dim wsZiel As Worksheet
Dim QuellZeile As Long
Dim Spalte As Long
Dim foundAll As Boolean
Dim ZielZeile As Range

' Setze die Arbeitsblätter
Set wsZiel = ThisWorkbook.Worksheets("Nummer")
With ThisWorkbook.Worksheets("Artikel")
For QuellZeile = 2 To .Cells(Rows.Count, "E").End(xlUp).Row
With .Rows(QuellZeile)
For Spalte = 5 To 38 ' Spalten E bis AL
foundAll = Vergleich(.Cells(Spalte), wsZiel.Range("D31:D39"))
If Not foundAll Then Exit For ' Beende die Schleife, da ein Wert nicht gefunden wurde
Next
' Wenn alle Suchbegriffe gefunden wurden
If foundAll Then
' Kopiere die relevanten Zellen in Tabelle 1
Set ZielZeile = wsZiel.Cells(Rows.Count, "F").End(xlUp).Rows(2)
ZielZeile.Range("F1").Value = .Range("F1").Value
ZielZeile.Range("G1").Value = .Range("I1").Value
ZielZeile.Range("H1").Value = .Range("K1").Value
ZielZeile.Range("I1").Value = .Range("M1").Value
ZielZeile.Range("J1").Value = .Range("O1").Value
ZielZeile.Range("K1").Value = .Range("Q1").Value
End If
End With
Next
End With
End Sub

Private Function Vergleich(ByVal Zelle As Range, ByVal Vergleichsliste As Range) As Boolean
Dim Elt

For Each Elt In Vergleichsliste
If Elt.value <> "" Then If Not InStr(1, Zelle.Value, Elt.Value, vbTextCompare) Then Exit Function
Next
Vergleich = True 'gilt nur, wenn nicht vorher ausgestiegen
End Function


VG
Yal
AW: VBA Suchen, Kopieren, Einfügen
Karutahi
Danke erstmal euch zwei für die ganze Hilfe bis jetzt.
Leider passiert bei diesem Code bei mir nichts. (Aber auch kein Fehler)
Nur wenn ich D31-D39 komplett leer mache, kopiert er mir immer in die gleichen zwei Zellen #NV :)

Nur aus Neugier:
Kopiere ich hier von F1 nach F1
Set ZielZeile = wsZiel.Cells(Rows.Count, "F").End(xlUp).Rows(2)

ZielZeile.Range("F1").Value = .Range("F1").Value


In diesem Sinne schon einmal ein schönes Wochenende.
AW: VBA Suchen, Kopieren, Einfügen
Karutahi
Und die Suchwerte aus den Zellen D31-D39 müssen wirklich alle in einer Zeile in Tabelle4 enthalten sein?
Ja, aber wenn eine Zelle(D31-D39) leer ist soll diese einfach ignoriert werden.

Ist es egal, in welchen Zellen die Werte aus D31-D39 gefunden werden, oder...
...muss z Bsp Wert aus D31 definitiv in Spalte K oder so enthalten sein?

Das ist egal, da die Daten immer gleich in Tabelle 4 geschrieben werden. Z.B. wir die "Form" immer in Zeile K stehen.

Musterdatei
https://www.herber.de/bbs/user/168839.xlsm
AW: VBA Suchen, Kopieren, Einfügen
Oberschlumpf
du weißt aber schon, dass mit der jetzigen Bsp-Datei NUR NACH "Form" in Tabelle4 ("Artikel") gesucht werden kann, oder?!

denn alle anderen Suchfelder in Tabelle1 ("Nummer"), wie...
Breite:
Höhe:
Layout:
Grundfarbe:
Schriftfarbe:
Monatsskala:
Mit Jahr von:
bis Jahr:
...gibt es ja gar nicht als Spalten in Tabelle4

Und nein, ich kann, bzw will das Ganze nicht so programmieren, dass es...vieeelleicht maaaal sein kann...dass in Tabelle4 weitere Spalten hinzugefügt werden, weil es - wenn etwas nicht da ist - einfach zu ungenau wird mit dem Programmieren.

Ich kann dir - jetzt - alles so programmieren, dass alle Suchbegriffe aus Tabelle1 eben in Tabelle4 - nur bis Spalte K - gesucht/gefunden werden.
Ist das so ok?

Nein? Dann zeig bitte eine neue Bsp-Datei, die in Tabelle4 auch alle notwendigen Spalten enthält; in allen Spalten in Tabelle4 müssen natürlich auch Bsp-Dten enthalten sein.

...P.S. ein "Hallo" zu Beginn und ein "Tschüss" am Ende in jedem Beitrag wird hier gern gesehen....nur so zur Info...
AW: VBA Suchen, Kopieren, Einfügen
Karutahi
Hi

Ja momentan ist Tabelle4 noch nicht fertig.
Mein Gedanke war das z.B. einfach in der ganzen Zeile in Tabelle 4 Gesucht wird (beginnend Zeile2) nach einem (oder mehreren Werten wenn vorhanden) die in Tabelle 1 in D31-D39 stehen.
Sollte sich dies als "Wahr" herausstellen, sollte es ein VBA-Schnipsel geben der eine "Wunschzelle" in dieser Seite kopiert und in Tabelle1 in F31 einfügt.
Diesen Schnipsel würde ich im VBA kopieren und mir zusätzlich eine weitere Wunschzelle kopiere und in G31 einfüge u.s.w.
Sollte es weitere Treffer in Tabelle 4 geben z.B. in Zeile 3, 4 .... sollte sich das spiel wiederholen und diese Werte in Tabelle1 ab F32 einfügen.

Ich hoffe ich konnte mein Vorhaben einigermaßen verständlich vermitteln :)

Ich werde morgen auch mal die Excel weiter fertig machen, damit man alles sehen kann was in Tabelle4 später stehen soll.

Dann wünsche ich jetzt erst mal noch einen schönen Abend.
AW: VBA Suchen, Kopieren, Einfügen
Oberschlumpf
Moin,

so, ich habe fertig :-)....denke ich

hier, probier mal...
https://www.herber.de/bbs/user/168875.xlsm

Ich tat mich zwar öfter schwerer damit, als ich es eigtl kenne, dass der Code einige Kontrollen korrekt durchführt, aber ich glaube, ich hab es nun doch geschafft.

Wenn du im Blatt "Nummer" auf den CommandButton2 klickst, wird im Blatt "Artikel" nach dem einzigen Suchtext "Pfeil" gesucht, und im Blatt "Nummer" werden, beginnend ab Zeile 31, Spalte F zwei Datenzeilen eingefügt, weil es im Blatt "Artikel" genau auch zwei Datenzeilen gibt, bei denen als Form "Pfeil" eingetragen ist.

Ich konnte das Ganze nun doch so programmieren, dass in "Artikel" nicht nur bis Spalte K gesucht wird (weil ja in der Bsp-Datei nur bis K Daten eingetragen sind), sondern du kannst in "Artikel" die Überschriften in Zeile 1 nach Belieben erweitern - es werden nun alle Spalten in "Artikel" durchsucht.

Beachte die Kommentare im Code.
Ach so, ich hab ein weiteres, allgemeines Modul hinzugefügt, damit mein Code dort "allein" enthalten ist, und du ihn besser "kennenlernen" kannst.
Nur den Code im Klick-Ereignis für den Button hab ich etwas angepasst.

Hilfts?
In der Bsp-Datei funktioniert es zumindest genau so, wie von dir gewünscht, bzw genau so, wie ich deinen Wunsch verstanden habe.

Ciao
Thorsten
AW: VBA Suchen, Kopieren, Einfügen
Markus
Hallo,

liest sich sehr vielversprechend.
Ich werde das am Montag gleich testen und ein Feedback geben. Danke für die Mühe.

Schönen Abend .
AW: VBA Suchen, Kopieren, Einfügen
Oberschlumpf
Hi,

na, funktionierts denn auch bei dir?

Ciao
Thorsten
AW: VBA Suchen, Kopieren, Einfügen
Karutahi
SUPER DANKE !!!!
Ein klick und alles läuft so wie es soll.
Respekt an dein Können Thorsten.

Danke und Gruß
Markus
auch danke und...bitte, gern geschehen owT
Oberschlumpf