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.

Excel VBA: Spalten in bestimmter Reihenfolge einfügen
#1
Hallo zusammen,

ich habe ein Makro aufgezeichnet, das grundsätzlich sehr gut funktioniert. Meine Frage wäre nur, ob sich der Code vereinfachen/verkürzen lässt.

Aus der Quelltabelle (Einsatzdetailreport) sollen Daten von diversen Spalten ab Zeile 2 bis letzte befüllte Zeile kopiert und als Werte in eine andere Tabelle (RE-Eingang) eingefügt werden. Die Reihenfolge der Spaltenanordnung in der Zieltabelle entspricht nicht der Quelltabelle. Dies ist der aktuelle Code aus der Makro-Aufzeichnung:

Code:
Sub DatenKopieren()
'
' DatenKopieren Makro
'

'
    Sheets("Einsatzdetailreport").Select
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("A3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("B3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("E2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("C3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("BD2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("D3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("BC2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("E3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("N2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("F3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("R2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("Q2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("H3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("T2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("I3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Einsatzdetailreport").Select
    Range("V2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("RE-Eingang").Select
    Range("J3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("B1").Select
End Sub

Vielen Dank schonmal für Eure Unterstützung.

LG Schumi
Talente finden Lösungen, Genies entdecken Probleme (Hans Krailsheimer)  Huh
Antworten Top
#2
Hallo,

vermutlich möchte sich niemand durch den Rekorder-Code wühlen. Wie wäre es mit einer Tabelle:

Quelle Ziel
A F
B Z
C A

usw.

mfg
Antworten Top
#3
Sortieren kann man am einfachsten im Arbetisblatt, nich bevor.
Zum übersetzen von Excel Formeln:

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

vielen Dank für Deine Rückmeldung. Hier die gewünschte Gegenüberstellung:

Zieltabelle | Quelltabelle
A3 | B2.xlDown
B3 | A2.xlDown
C3 | E2.xlDown
D3 | BD2.xlDown
E3 | BC2.xlDown
F3 | N2.xlDown
G3 | R2.xlDown
H3 | Q2.xlDown
I3 | T2.xlDown
J3 | V2.xlDown

Ich hoffe, das ist jetzt etwas übersichtlicher als im Code Smile
Talente finden Lösungen, Genies entdecken Probleme (Hans Krailsheimer)  Huh
Antworten Top
#5
Hallo,

teste mal mit

Code:
Sub T_2()
Const Ar As String = "A3|B2|B3|A2|C3|E2|D3|BD2|E3|BC2|F3|N2|G3|R2|H3|Q2|I3|T2|J3|V2|"

Dim Qu As Worksheet: Set Qu = Sheets("Einsatzdetailreport")
Dim Zi As Worksheet: Set Zi = Sheets("Re-Eingang")
Dim rng As Range

icol = Split(Ar, "|")
With Qu
For j = 1 To 10
    .Range(.Cells(3, j), .Cells(Rows.Count, j).End(xlUp)).Copy Zi.Range(icol((j - 1) * 2 + 1))
Next j
End With
End Sub

Falls die Systematik doch anderst sein sollte, der Code ist leicht anzupassen.

mfg


Angehängte Dateien
.xlsm   Spalten kopieren.xlsm (Größe: 19,73 KB / Downloads: 0)
Antworten Top
#6
Hallo Fennek,

die kopierten Daten werden noch nicht an der richtigen Stelle in der Zieltabelle eingefügt. Vielleicht lag es auch an meiner unklaren Gegenüberstellung.

Beispiel:

  • Die Daten der Quelltabelle (Einsatzdetailreport) B2 bis letzte befüllte Zeile der Spalte B kopieren und die Werte in Zelle A3 der Zieltabelle (RE-Eingang) einfügen.
  • Die Daten der Quelltabelle (Einsatzdetailreport) A2 bis letzte befüllte Zeile der Spalte A kopieren und die Werte in Zelle B3 der Zieltabelle (RE-Eingang) einfügen.
  • Die Daten der Quelltabelle (Einsatzdetailreport) E2 bis letzte befüllte Zeile der Spalte E kopieren und die Werte in Zelle C3 der Zieltabelle (RE-Eingang) einfügen.
  • usw.

Ich wäre Dir sehr dankbar, wenn Du Deinen Code hier nochmal nachjustieren könntest. Herzlichen Dank!

LG Schumi
Talente finden Lösungen, Genies entdecken Probleme (Hans Krailsheimer)  Huh
Antworten Top
#7
Code:
Sub T_3()
Const Ar As String = "A3|B2|B3|A2|C3|E2|D3|BD2|E3|BC2|F3|N2|G3|R2|H3|Q2|I3|T2|J3|V2|"

Dim Qu As Worksheet: Set Qu = Sheets("Einsatzdetailreport")
Dim Zi As Worksheet: Set Zi = Sheets("Re-Eingang")
Dim rng As Range

icol = Split(Ar, "|")
With Qu
For j = 1 To 10
    .Range(.Cells(3, j), .Cells(Rows.Count, j).End(xlUp)).Copy
    Zi.Range(icol((j - 1) * 2 + 1)).PasteSpecial xlPasteValues
Next j
End With
End Sub


Angehängte Dateien
.xlsm   Spalten kopieren.xlsm (Größe: 20,64 KB / Downloads: 4)
Antworten Top


Gehe zu:


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