PDA

Vollständige Version anzeigen : Spalten in die gewünschte Position setzen


manu1988
12.12.2017, 12:22
Hallo sehr geehrte Forum Mitglieder,

ich habe da ein Problem, dass ich einfach nicht lösen kann.



Ar = Cells(1).CurrentRegion
ReDim Br(UBound(Ar), UBound(Ar, 2))
For z = 1 To UBound(Ar)
Br(z, 1) = Ar(z, 1)
Br(z, 2) = Ar(z, 3)
Br(z, 3) = Ar(z, 13)
Br(z, 4) = Ar(z, 4)
Br(z, 5) = Ar(z, 5)
Br(z, 6) = Ar(z, 6)
Br(z, 7) = Ar(z, 7)
Br(z, 8) = Ar(z, 8)
Br(z, 9) = Ar(z, 2)
Br(z, 10) = Ar(z, 9)
Br(z, 11) = Ar(z, 14)
Br(z, 12) = Ar(z, 15)
Br(z, 13) = Ar(z, 10)
Br(z, 14) = Ar(z, 11)
Br(z, 15) = Ar(z, 12)
Next z
Cells(1).Resize(UBound(Br) + 1, UBound(Br, 2) + 1) = Br



Mit diesem Code passe ich die Spaltenreihenfolge an. Also ich bringe damit die Spalten in die gewünschte Position. Das funktioniert alles auch prima. Jedoch habe ich dann jeweils links eine Spalte frei und oben eine Zeile. Das heißt, die Tabelle beginnt dann nach der Anordnung durch den Code in der Zelle (2,2). Habe schon alles ausprobiert, aber vergeblich. Könnt ihr mir da helfen, den Fehler zu finden? Ein anderer Code dafür wäre auch völlig in Ordnung. Hauptsache es macht, was es machen soll.

Ich freue mich sehr, wenn mir einer helfen kann..

EarlFred
12.12.2017, 12:33
Hallo,

Datenfelder, die durch "Abklatsch" eines Zellbereichs entstehen, beginnen immer bei 1. Datenfelder, die Du mittels Dim / Redim erzeugst, beginnen bei 0 (solange diese Einstellung nicht geändert wird)

Ich würde immer Lbound() und Ubound() verwenden:
ReDim Br(LBound(Ar, 1) To UBound(Ar, 1), LBound(Ar, 2) To UBound(Ar, 2))
For Z = LBound(Ar, 1) To UBound(Ar, 1)
Br(Z, 1) = Ar(Z, 1)
Br(Z, 2) = Ar(Z, 3)
Br(Z, 3) = Ar(Z, 13)
Br(Z, 4) = Ar(Z, 4)
Br(Z, 5) = Ar(Z, 5)
Br(Z, 6) = Ar(Z, 6)
Br(Z, 7) = Ar(Z, 7)
Br(Z, 8) = Ar(Z, 8)
Br(Z, 9) = Ar(Z, 2)
Br(Z, 10) = Ar(Z, 9)
Br(Z, 11) = Ar(Z, 14)
Br(Z, 12) = Ar(Z, 15)
Br(Z, 13) = Ar(Z, 10)
Br(Z, 14) = Ar(Z, 11)
Br(Z, 15) = Ar(Z, 12)
Next Z
Cells(1).Resize(UBound(Ar, 1) - LBound(Ar, 1) + 1, UBound(Ar, 2) - LBound(Ar, 2) + 1).Value = Br

Oder viel einfacher so:
Ar = Cells(1).CurrentRegion.Value

Br = Ar

For Z = LBound(Ar, 1) To UBound(Ar, 1)
Br(Z, 2) = Ar(Z, 3)
Br(Z, 3) = Ar(Z, 13)
Br(Z, 9) = Ar(Z, 2)
Br(Z, 10) = Ar(Z, 9)
Br(Z, 11) = Ar(Z, 14)
Br(Z, 12) = Ar(Z, 15)
Br(Z, 13) = Ar(Z, 10)
Br(Z, 14) = Ar(Z, 11)
Br(Z, 15) = Ar(Z, 12)
Next Z
Cells(1).Resize(UBound(Ar, 1) - LBound(Ar, 1) + 1, UBound(Ar, 2) - LBound(Ar, 2) + 1).Value = Br
End Sub

Grüße
EarlFred

manu1988
13.12.2017, 11:44
Herzlichen Dank für deine schnelle und wie immer effektive Lösung. Klappt prima. Ich hätte da eigentlich noch ein kleines Problem. Ich habe mir eine UserForm zusammengestellt. Alles funktioniert. Nur würde ich gerne beim start der Excel Datei eigentlich nur die UserForm sehen. Ich habe auch grad im Forum gesucht und auch gewisse Beiträge dazu gefunden, aber konnte mir damit keine Lösung zusammenstellen. Könntest du mir dabei helfen?