Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[VBA] Makro verkürzen
#1
Hi,

ich habe eine Datei übernommen und will die schneller machen.

Mit dem folgenden Code-Teil werden aus der Quell-Datei 10 gefilterte (325 aus 7600 Zeilen) Spalten einzeln in andere Spalten der Ziel-Datei kopiert.
Wie kann ich diesen 10 mal vorkommenden Block verkürzen?

Code:
Windows("EVG.xlsb").Activate
   Sheets("2001").Select
   Range("I:I").copy
   Windows("aktuell.xlsm").Activate
   Sheets("Rohdaten").Select
   Range("A:A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False

Die ganze Kopiererei versuchte ich wegzulassen, das hat aber nicht geklappt:
Workbooks("aktuell.xlsm").Sheets("Rohdaten").Range("A:A") = Workbooks("EVG.xlsb").Sheets("2001").Range("I:I")

oder so:
Code:
Workbooks("EVG.xlsb").Sheets("2001").Range("I:AB").copy
   Workbooks("aktuell.xlsm").Sheets("Rohdaten").Range("R:R").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False

Die Spalten sind:
I nach A, D nach D, K nach V, X nach E, J nach F, H nach G, U nach J, R nach K, E nach O, AB nach R
Antworten Top
#2
Hi Rabe,

hilft dir diese Info dazu weiter: https://www.informatik-aktuell.de/betrie...eiten.html

Viel Erfolg!
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • Rabe
Antworten Top
#3
Code:
Sub M_snb()
  for j=1 to 10
    Workbooks("EVG.xlsb").Sheets("2001").usedrange.columns(choose(j,9,4,11,24,10,8,21,18,5,28)).copy Workbooks("aktuell.xlsm").Sheets("Rohdaten").cells(1,choose(j,1,4,22,5,6,7,10,11,15,18))
  next
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
Hi,

danke erst mal.

@snb: Das teste ich morgen.

@LuckyJoe:
Vielleicht schaffe ich es mit dieser Seite auch irgendwann mal, die Array-Verarbeitung zu kapieren.
Antworten Top
#5
Hi snb,

nun habe ich es getestet und es funktioniert.

Es werden aber die kompletten Zellen eingefügt und ich hätte gerne nur die Werte.

Bei
Code:
Sub M_snb()
  for j=1 to 10
    Workbooks("EVG.xlsb").Sheets("2001").usedrange.columns(choose(j,9,4,11,24,10,8,21,18,5,28)).copy
    Workbooks("aktuell.xlsm").Sheets("Rohdaten").cells(1,choose(j,1,4,22,5,6,7,10,11,15,18)).PasteSpecial Paste:=xlPasteValues
  next
End Sub
kommt die Fehlermeldung, daß die PasteSpecial-Methode für das Range-Objekt nicht ausgeführt werden könne.
Antworten Top
#6
Hi Ralf,

Makro sollte eigentlich so aussehen:


Code:
Sub M_snb()
  For j = 1 To 10
    Workbooks("EVG.xlsb").Sheets("2001").UsedRange.Columns(Choose(j, 9, 4, 11, 24, 10, 8, 21, 18, 5, 28)).Copy_ Workbooks("aktuell.xlsm").Sheets("Rohdaten").Cells(1, Choose(j, 1, 4, 22, 5, 6, 7, 10, 11, 15, 18))
  Next
End Sub


keine 2 Zeilen!!!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#7
Hi Edgar,

(08.06.2018, 07:58)Rabe schrieb: Es werden aber die kompletten Zellen eingefügt und ich hätte gerne nur die Werte.

Gruß Uwe
Antworten Top
#8
Hi,

@Edgar
ja, so hatte ich es auch, bis ich merkte, daß es alles kopiert und nicht nur die Werte. Dann habe ich es mit PasteSpecial probiert und dann in zwei Zeilen mit PasteSpecial.
Den Stand habe ich dann hier eingefügt.

@Uwe
ja, genau!
Antworten Top
#9
Hi,

ich hatte nur nackte Zahlen in meiner Tabelle, deswegen ist es mir nicht aufgefallen.
Bei mir läuft es mit Deinem Code durch ohne zu mucken.
Falsch, der Code hat bei mir eine klitzekleine Änderung erfahren:


Code:
Sub M_snb()
  For j = 1 To 10
    Workbooks("EVG.xlsb").Sheets("2001").UsedRange.Columns(Choose(j, 9, 4, 11, 24, 10, 8, 21, 18, 5, 28)).Copy
    Workbooks("Aktuell.xlsm").Sheets("Rohdaten").Cells(1, Choose(j, 1, 4, 22, 5, 6, 7, 10, 11, 15, 18)).PasteSpecial Paste:=xlValues
  Next
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Rabe
Antworten Top
#10
Hi,

danke. So klappt es.

Komisch, daß es in dem Fall nicht xlPasteValues heißt.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste