Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte suchen und in Zielmappe kopieren

Werte suchen und in Zielmappe kopieren
11.03.2021 19:30:46
Gerald
Hallo, ich möchte euch bei folgenden Problem um Hilfe bitten.
Ich arbeite mit 2 Arbeitsmappen.
Die 1. Mappe ist für die Sammlung der Daten aus der anderen 2. Mappe zuständig.
Mappe1 (Zielmappe)
Hier stehen in Spalte A ab Zeile 3 untereinander ID-Nummern (Anzahl ist unterschiedlich).
In Zeile 2 stehen in den Spalten C, D, E, F, G, H, I …. Überschriften der zu suchenden Daten
Anhand der IDs in Spalte A soll nun in Mappe2 (Quellmappe) die richtige Zeile und Spalte gesucht werden um die benötigten Daten in die Zielmappe zu kopieren.
Das Problem ist, das in der Mappe2 (Quelle) die Daten auf verschiedenen Tabellenblättern stehen.
Ich habe mit Hilfe eines Codes zwar einen Weg gefunden, aber es dauert irre lange bis er alle Werte kopiert hat.
Wenn man beobachtet wie die Zellen in der Mappe1 gefüllt werden denkt man es läuft in Zeitlupe ab.
Und wenn er dann aus dem Sheet(2) in der Mappe2 Daten suchen will, dauert es fast 2 Minuten bis er damit anfängt.
Ich habe das Gefühl, das der Code die gesamte Spalte A in der Zielmappe abarbeitet und nicht nur die gefüllten Zellen in A mit IDs
Vielleicht hat ja jemand eine bessere Lösung für mich.
Ich hätte gern Beispieldateien beigefügt, aber es sind alles sehr sensible SAP Daten aus meiner Firma.
Hier mal mein Code:
  • 
    Public Sub Werte_kopieren_aus_Quelle()
    'Mit diesem Makro werden die Werte, abhängig von der eingetragenen ID in der Zielmappe (Spalte  _
    A),
    'in der Quellmappe ermittelt und kopiert
    'Quellmappe -> Sheet 1
    Dim lngRow As Long
    Dim objCell As Range
    Dim objTargetSheet As Worksheet, objSourceSheet As Worksheet
    Set objTargetSheet = ThisWorkbook.Sheets(1)                         'Die Zielmappe, Blatt  _
    Berechnung
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(1)                'Die Quellmappe  _
    KPI und dort das Blatt 1
    With objTargetSheet
    For lngRow = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row          'Fange ab Zeile 3 in  _
    Spalte A an die IDs einzulesen (Zielmappe)
    'Suche in Quellmappe in  _
    Spalte A diese IDs
    Set objCell = objSourceSheet.Columns(1).Find( _
    What:=.Cells(lngRow, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    .Cells(lngRow, 3).Value = objCell.Offset(0, 1).Value    'Trage in der Zielmappe  _
    in Spalte 3 (entspricht Spalte C)
    'den Wert aus der  _
    Quellmappe aus Spalte B ein
    'Offset(0, 1) steht für  _
    1 Spalte in der Mappe nach rechts = B
    'Offset(0, 4) würde heiß _
    en 4 Spalten nach rechts = E
    .Cells(lngRow, 4).Value = objCell.Offset(0, 2).Value
    .Cells(lngRow, 5).Value = objCell.Offset(0, 3).Value
    .Cells(lngRow, 6).Value = objCell.Offset(0, 4).Value
    .Cells(lngRow, 7).Value = objCell.Offset(0, 6).Value
    Set objCell = Nothing
    End If
    Next
    End With
    Set objTargetSheet = Nothing
    Set objSourceSheet = Nothing
    'Quellmappe -> Sheet 2
    Set objTargetSheet = ThisWorkbook.Sheets(1)
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(2)
    With objTargetSheet
    For lngRow = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row
    Set objCell = objSourceSheet.Columns(1).Find( _
    What:=.Cells(lngRow, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    .Cells(lngRow, 8).Value = objCell.Offset(0, 3).Value
    .Cells(lngRow, 9).Value = objCell.Offset(0, 4).Value
    Set objCell = Nothing
    End If
    Next
    End With
    Set objTargetSheet = Nothing
    Set objSourceSheet = Nothing
    'Quellmappe -> Sheet 3
    Set objTargetSheet = ThisWorkbook.Sheets(1)
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(3)
    With objTargetSheet
    For lngRow = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row
    Set objCell = objSourceSheet.Columns(1).Find( _
    What:=.Cells(lngRow, 1).Value, LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    .Cells(lngRow, 10).Value = objCell.Offset(0, 2).Value
    .Cells(lngRow, 11).Value = objCell.Offset(0, 3).Value
    Set objCell = Nothing
    End If
    Next
    End With
    Set objTargetSheet = Nothing
    Set objSourceSheet = Nothing
    End Sub
    



  • 5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Werte suchen und in Zielmappe kopieren
    11.03.2021 21:02:09
    Piet
    Hallo
    ich kann keine nenneswerte Verbesserung im Code sehen, ausser den Bereich in der 1. For Schleife mit Copy zu übertragen, statt jede Zelle einzeln. Ausserdem überspringe ich Leerzellen und schalte den Bildschrim ab. Die For Schleifen habe ich auf For Each umgestellt, und der Suchlauf beginnt jetzt immer ab A1. Schau bitte mal ob dieses Aenderungen dir was bringen?
    Die 1. Set Anweisung bleibt für alle drei For Next bestehen, die brauchst du nicht zwischendurch zu löschen!! Ich bin gespannt ob sich etwas aendert. Wo das Makro arbeitet siehst du in der Bearbeitungszeile.
    Die bleibt manchmal stehen, das Makro laeuft trotzdem weiter.

    mfg Piet
    
    
    
    Public Sub Werte_kopieren_aus_Quelle()
    'Mit diesem Makro werden die Werte, abhängig von der eingetragenen ID _
    'in der Zielmappe (Spalte A),in der Quellmappe ermittelt und kopiert
    Dim AC As Range, objCell As Range, lngRow As Long, Txt
    Dim objZielSheet As Worksheet, objSourceSheet As Worksheet
    'Die Zielmappe, Blatt Berechnung ; Quellmappe KPI und dort das Blatt 1
    Set objZielSheet = ThisWorkbook.Sheets(1)
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(1)
    'Bildschşrm abschalten
    Application.ScreenUpdating = False
    With objZielSheet
    lngRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Txt = lngRow & "  " & objSourceSheet.Name
    For Each AC In .Range("A3:A" & lngRow)
    Application.StatusBar = AC.Row & " / " & Txt
    'Fange ab Zeile 3 in Spalte A an die IDs einzulesen (Zielmappe)
    'Suche in Quellmappe in Spalte A diese IDs
    If AC.Value  Empty Then
    Set objCell = objSourceSheet.Columns(1).Find(What:=AC, _
    After:=[a1], LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    objCell.Offset(0, 1).Resize(1, 5).Copy
    AC.Cells(1, 3).PasteSpecial xlPasteValues
    End If
    End If
    Next
    End With
    'Quellmappe -> Sheet 2
    Application.CutCopyMode = False
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(2)
    Txt = lngRow & "  " & objSourceSheet.Name
    With objZielSheet
    For Each AC In .Range("A3:A" & lngRow)
    Application.StatusBar = AC.Row & " / " & Txt
    If AC.Value  Empty Then
    Set objCell = objSourceSheet.Columns(1).Find(What:=AC, _
    After:=[a1], LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    AC.Cells(1, 8).Value = objCell.Offset(0, 3).Value
    AC.Cells(1, 9).Value = objCell.Offset(0, 4).Value
    End If
    End If
    Next
    End With
    'Quellmappe -> Sheet 3
    Set objSourceSheet = Workbooks("Quellmappe.xlsx").Sheets(3)
    Txt = lngRow & "  " & objSourceSheet.Name
    With objZielSheet
    For Each AC In .Range("A3:A" & lngRow)
    Application.StatusBar = AC.Row & " / " & Txt
    If AC.Value  Empty Then
    Set objCell = objSourceSheet.Columns(1).Find(What:=AC, _
    After:=[a1], LookIn:=xlValues, LookAt:=xlWhole)
    If Not objCell Is Nothing Then
    AC.Cells(1, 10).Value = objCell.Offset(0, 2).Value
    AC.Cells(1, 11).Value = objCell.Offset(0, 3).Value
    End If
    End If
    Next
    End With
    Set objZielSheet = Nothing
    Set objSourceSheet = Nothing
    Application.StatusBar = Empty
    End Sub
    


    Anzeige
    AW: Werte suchen und in Zielmappe kopieren
    11.03.2021 21:27:22
    Gerald
    Hi Piet,
    danke Dir für den Tipp.
    Werde ich morgen in der Firma mal probieren.
    Meine Befürchtung war ja, das er die letzte beschriebene Zelle in Spalte A nicht ermittelt, sondern einfach bis ins unendliche durchläuft (also null Eintrag mit null Eintrag vergleicht).
    Aber wie gesagt, morgen früh probiere ich es direkt aus
    Gruß
    gerald

    AW: Werte suchen und in Zielmappe kopieren
    12.03.2021 07:42:31
    Gerald
    Guten Morgen Piet,
    ich habe heute morgen Deinen abgeänderten Code mal eingebaut.
    Also der ist deutlich, sehr deutlich schneller.
    hab ganz lieben Dank für Deine Hilfe
    mfg Gerald

    AW: Werte suchen und in Zielmappe kopieren
    12.03.2021 11:59:14
    Piet
    Danke für die Rückmeldung
    freut mich das mein Code deutlich schneller ist. Optimaler waere es über Array zu programmieren, das habe ich aber nicht drauf. Die Technik muss man sehr genau kennen, sonst kommt Murks raus!
    mfg Piet

    Anzeige
    AW: Werte suchen und in Zielmappe kopieren
    12.03.2021 13:38:29
    Gerald
    Vielleicht kennt sich ja jemand hier damit aus.
    Wenn es damit noch schneller geht, ist ja noch besser.
    Aber immerhin konnte ich die Zeit mit Deinem Code um gut 50% verringern.
    mfg
    Gerald

    304 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige