Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Übereinstimmungen übertragen

Übereinstimmungen übertragen
28.05.2006 20:28:38
Dirk
Hallo Leute,
Ich habe zwei recht große Tabellen (ca 55000 Zeilen und 100 Spalten, evtl. auch in zwei Mappen) bei denen ich vorher definierte Spalten ab einer vorher definierten Zeile vergleichen möchte. Sollten Übereinstimmungen gefunden werden möchte ich aus der Quelltabelle die Zeile ab der definierten Spalte in die Targettabelle neben die übereinstimmende Zelle kopieren (nur Werte und Formate). Die Zielspalte wird, wie alle anderen Variabelen, vorher über eine Inputbox abgefragt. Ich habe mich für eine Inputboxen statt einer Userform entschieden, da das Makro dann einfach in andere Mappen übertragen werden kann. Bei den zu kopierenden Zeilen muß nicht jede Zelle ausgefüllt sein. Daher habe ich die Variabele Ende1 (s. u.) eingeführt
Im Prinzip ist das nich viel anders als:
https://www.herber.de/forum/archiv/312to316/t312331.htm
Das Makro funktioniert bei mir nur leider nicht. Ich habe daher selbst etwas geschrieben. Ich habe aber das Gefühl, dass das nicht sonderlich effektiv ist. Es ist nicht wesentlich schneller als SVERWEIS. Kann mir jemand sagen wie ich das Makro effektiver machen kann? Ich habe den wesentlichen Teil unten angehängt.
Merge:
Workbooks(varBookTarget).Activate
Worksheets(varSheetTarget).Activate
Range(varColTarget & varRowTarget).Activate
x = -1
Workbooks(varBookSour).Worksheets(varSheetSour).Activate
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
Ende1 = ActiveCell.Column
Application.ScreenUpdating = False
Von_Vorne:
x = x + 1
varInput = Sheets(varSheetTarget).Range(varColTarget & varRowTarget + x).Value
Do Until IsEmpty(varInput)
Set Found = Workbooks(varBookSour).Worksheets(varSheetSour). _
Columns(varColSour).Find(What:=varInput, LookAt:=xlWhole, LookIn:=xlValues)
If Found Is Nothing Then
GoTo Von_Vorne
Exit Sub
End If
FoundA = Found.Row
FoundC = Found.Column
StartA = Cells(FoundA, FoundC).Address(False, False)
EndeA = Cells(FoundA, Ende1).Address
Workbooks(varBookSour).Worksheets(varSheetSour).Activate
Workbooks(varBookSour).Worksheets(varSheetSour).Range(StartA, EndeA).Copy
With Workbooks(varBookTarget).Worksheets(varSheetTarget). _
Range(varColTargetP & varRowTarget + x)
.PasteSpecial Paste:=xlValues ' Werte
.PasteSpecial Paste:=xlFormats ' Formate)
Application.CutCopyMode = False
End With
x = x + 1
varInput = Sheets(varSheetTarget).Range(varColTarget & varRowTarget + x).Value
Loop

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übereinstimmungen übertragen
29.05.2006 13:36:17
Franz
Hallo Dirk,
generell bremsen Activate-Anweisungen. Dieses lassen sich aber meistens vermeiden, indem man die entsprechenden Objekte deklariert oder direkt mit vollständiger Bezeichnung anspricht.
Ich habe mal deinen Code in dieser Hinsicht angepaßt, konnte aber nicht testen ob das jetzt Alles so funktioniert. Zumindest der Kompiler hat nicht aufgemuckt. Außerdem erschien mir die Deklaration der Quell- und Zieltabelle als Variablen sinnvoll um den Code etwas übersichtlicher zu gestalten.

Sub test2()
Dim Ziel As Worksheet, Quelle As Worksheet
Set Ziel = Workbooks(varBookTarget).Worksheets(varSheetTarget)
Set Quelle = Workbooks(varBookSour).Worksheets(varSheetSour)
Merge:
Ziel.Range(varColTarget & varRowTarget).Activate
x = -1
Ende1 = Quelle.Cells.SpecialCells(xlCellTypeLastCell).Column
Application.ScreenUpdating = False
Von_Vorne:
x = x + 1
varInput = Ziel.Range(varColTarget & varRowTarget + x).Value
Do Until IsEmpty(varInput)
Set Found = Quelle.Columns(varColSour).Find(What:=varInput, LookAt:=xlWhole, LookIn:=xlValues)
If Found Is Nothing Then
GoTo Von_Vorne
'      Exit Sub 'überflüssing, Zeile wird wegen vorherigem GoTo nie erreicht
End If
FoundA = Found.Row
FoundC = Found.Column
StartA = Quelle.Cells(FoundA, FoundC).Address(False, False)
EndeA = Quelle.Cells(FoundA, Ende1).Address
Quelle.Range(StartA, EndeA).Copy
With Ziel.Range(varColTargetP & varRowTarget + x)
.PasteSpecial Paste:=xlValues ' Werte
.PasteSpecial Paste:=xlFormats ' Formate)
Application.CutCopyMode = False
End With
x = x + 1
varInput = Ziel.Range(varColTarget & varRowTarget + x).Value
Loop
End Sub

Gruß
Franz
Anzeige
Danke
30.05.2006 10:07:49
Dirk
Hallo Franz,
danke! Das funkioniert deutlich besser als mein Code.
Grüße
Dirk

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige