Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Spalten kopieren und vergleichen (dynamisch)

VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 11:25:31
Emre
Hallo zusammen,
ich habe folgendes Problem:
Ich muss aus 3 Excel-Dateien jeweils eine Spalte in eine neue Excel-Datei importieren bzw. kopieren. 2 dieser 3 Spalten haben zwischen 1.000 und 2.000 Zeilen die 3. Datei hat um die 30.0000 Zeilen. Diese 3 Spalten muss ich dann in der neuen Excel-Datei miteinander auf die selben Inhalte vergleichen und in den nebenstehenden Spalten anmerken, ob ein doppelter Inhalt in den Spalten besteht.
Ein Problem dabei ist, dass die Dateinamen sich ändern können, daher wäre es wahrscheinlich am besten mit einer Inputbox die Dateien und die jewieligen Spalten auswählen zu können.
Einen Code für das Kopieren der Spalten habe ich gefunden:
Sub test()
Dim icnt As Long
'Variablendeklarationen
Dim rngTarget As Range, rngSource As Range
'Bei Fehler weiter mit nächstem Kommando
On Error Resume Next
'Kopierbereich auswaehlen
Set rngSource = Application.InputBox("Wählen Sie den Bereich zum Kopieren aus:", _
"Bereich kopieren", , , , , , 8)
If rngSource Is Nothing Then Exit 

Sub        ' Auswahl abgebrochen
'Zielzelle auswaehlen - obere linke zelle des Einfuegebereichs
'Hinweis: Keine Fehlerpruefung auf Auswhal mehrere Zellen
Set rngTarget = Application.InputBox("Wählen Sie die Zelle zum Einfügen aus:", _
"Bereich kopieren", , , , , , 8)
'Fehlerbehandlung Ende
On Error GoTo 0
If rngTarget Is Nothing Then Exit 

Sub        ' Auswahl abgebrochen
'Bereich kopieren
rngSource.Copy
'Daten einfuegen
rngTarget.PasteSpecial
'Spaltenbreite kopieren
rngTarget.PasteSpecial Paste:=8
'Schleife ueber alle Zeilen
For icnt = rngTarget.Row To rngTarget.Row + Selection.Rows.Count - 1
'Zeilenhoehe uebernehmen
Rows(icnt).RowHeight = rngSource.Rows(icnt).RowHeight
'Ende Schleife ueber alle Zeilen
Next
End Sub

Dieser Code macht seinen Job eigentlich auch ganz gut. Nur ich muss die Dateien bereits davor geöffnet haben, es wäre schöner wenn ich die Datei in einem Dialog auswählen und dann die zu kopierende Spalte markieren könnte.
Und eines der Dateien hat um die 30.000 Zeilen. Die Zeile hier, die kopiert werden soll, hat aber nur um die 9.000 Zeilen beschrieben. Diese zu kopieren klappt einfach mit dem Code nicht. Excel hängt sich jedes mal auf.
Kann mir jemand helfen?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 11:48:36
Günther
Moin,
wenn ich deine Anforderungen richtig interpretiere sollte das gut mit Power Query / Daten | Abrufen und transformieren lösbar sein ...
Dabei ist kein VBA erforderlich, ein solides Excel-Feeling ist von Vorteil. ;-)
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 12:17:10
Emre
Hallo Günther,
Danke für den Tipp, leider gibt es hier keine Power Query. Darf man wohl nicht einsetzen.
Gibt es weitere Möglichkeiten um dieses Problem elegant zu lösen?
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 12:24:34
Günther
Moin,
in Office 365 ist Power Query unter Daten | Abrufen und transformieren zu finden bzw. bereits integriert.
... und wenn du dich einigermaßen in PQ eingearbeitet hast, ist das problemlos möglich. Anhand einer (anonymisierten) Muster-xlsx zeige ich es dir/euch gerne.
Anzeige
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 16:47:22
kesici
Hatte nochmals nachgeschaut, konnte keine Excel-Dateien abrufen. Und die PowerQuery gibt es nicht, habe auch im Internet nachgeschaut.
Wahrscheinlich ist es kein Office 365. Vielleicht liegt es daran.
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 17:08:54
Günther
So, ohne Ironie: Du scheinst wirklich interessiert zu sein und einen gewissen Forscherdrang zu haben. Und weil du gerade das Internet angesprochen hast: (beispielsweise) hier: http://www.excel-ist-sexy.de/power-query-das-add-in/ findest du einiges an Basis-Infos zu Power Query.
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 18:06:58
kesici
Danke Danke :D
Genau so einen Bereich wie in der Abbildung im Link gibt es bei mir nicht und herunterladen darf ich im Geschäft auch nicht. Unter der Option in den Add-ins gabs auch keine Power query..
Anzeige
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
30.10.2017 19:07:25
Günther
Ja, es ist richtig ...
Wenn du (im Betrieb) weder 2016 noch 365 hast, dann müsstest du von MS das Add-In herunterladen. Leider ist das in vielen Fällen einfach verboten. Aber Makros (die teilweise für die reichlich Erpresser-Trojaner (RansomWare) verantwortlich sind, die dürfen verwendet werden ... Kopfschüttel verstärkt :-( (Speziell dazu gibt es im gleichen Blog noch einen Beitrag: http://www.excel-ist-sexy.de/add-in-darf-nicht-installiert-werden/)
Beste Grüße
Günther
(ich vermisse hier übrigens die Möglichkeit, diesen Footer automatisch einzublenden, wie in anderen Foren auch)
Anzeige
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
31.10.2017 10:24:20
kesici
Danke für den Link. Leider ist es halt so.
Kann mir vielleicht jemand helfen :) Ich habe bereits den Code, wie in der ersten Nachricht beschrieben. Nur habe ich Probleme mit der großen Datei, wie kann ich dieses Problem lösen?
Und wie kann ich die Datei öffnen und die Spalten auswählen. Im obigen Code muss die Datei ja bereits geöffnet sein und das möchte man nicht.
AW: VBA: Spalten kopieren und vergleichen (dynamisch)
31.10.2017 18:12:32
kesici
Hallo nochmal an Alle,
bin jetzt ein Stück weiter gekommen. Ich kann nun die Datei öffnen und die Bereiche, die ich kopieren möchte auswählen. Ist eigentlich auch genau das, was ich möchte.
Nur gibt es ein Problem mit der Bearbeitungszeit (wie oben erwähnt). Die Datei hängt sich jedesmal auf, wenn ich die Spalte in der großen Datei kopiere und dann einfüge. Außerdem wäre es Anwendungsfreundlicher wenn ich nur die nicht leeren Zellen kopieren könnte.
Hat jemand eine Idee?
Der aktuelle Code sieht so aus:

Sub test()
Dim icnt As Long
'Variablendeklarationen
Dim rngTarget As Range, rngSource As Range
'Bei Fehler weiter mit nächstem Kommando
Dim dati As Variant
On Error Resume Next
Set awn = ThisWorkbook
'Datei öffnen
dati = Application.GetOpenFilename("Excel-Dateien(*.xl*),*.xl*")
If dati = False Then Exit Sub
Set WB = Workbooks.Open(Filename:=dati)
'Kopierbereich auswaehlen
Set rngSource = Application.InputBox("Wählen Sie den Bereich zum Kopieren aus:", _
"Bereich kopieren", , , , , , 8)
If rngSource Is Nothing Then Exit Sub
' Auswahl abgebrochen
'Zielzelle auswaehlen - obere linke zelle des Einfuegebereichs
'Hinweis: Keine Fehlerpruefung auf Auswhal mehrere Zellen
Set rngTarget = Application.InputBox("Wählen Sie die Zelle zum Einfügen aus:", _
"Bereich kopieren", , , , , , 8)
'Fehlerbehandlung Ende
On Error GoTo 0
If rngTarget Is Nothing Then Exit Sub
' Auswahl abgebrochen
'Bereich kopieren
rngSource.copy
'Daten einfuegen
rngTarget.PasteSpecial
'Spaltenbreite kopieren
rngTarget.PasteSpecial Paste:=8
'Schleife ueber alle Zeilen
For icnt = rngTarget.Row To rngTarget.Row + Selection.Rows.Count - 1
'Zeilenhoehe uebernehmen
Rows(icnt).RowHeight = rngSource.Rows(icnt).RowHeight
'Ende Schleife ueber alle Zeilen
Next
End Sub

Anzeige

337 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige