2016-12-13 7 views
-2

Ich ziehe Daten aus Tableau mehrmals (50-150x) im Laufe des Tages. Wir sprechen von mehr als 100 Spalten und von 5 bis 5000 Zeilen. Ein Problem besteht darin, dass Tableau die Spalten nach Kopfzeilen in alphabetischer Reihenfolge sortiert, aber ich brauche sie in einer bestimmten Reihenfolge. Also zeichnete ich ein Makro auf, das manuell jede Zeile löschte/einfügte - was FOREVER dauerte. Dann entfernte ich die "scrollenden" Codebits und deaktivierte Bildschirmaktualisierungen, um sie ein wenig schneller zu machen, aber es ist immer noch ziemlich langsam. Manchmal dauert es mehr als 45 Sekunden zu laufen. In Anbetracht der Rate, die ich diese Aufgabe an einem Tag erledige, ist dies wesentlich langsamer, als ich weiß, ist möglich. Letztlich müssen, ich die Spalten in dieser Reihenfolge zur Karte:VBA um mehr als 100 Spalten zu reorganisieren?

Tableau Column | Becomes 
---- ---- ---- 
L | A 
AH | B 
CD | C 
AG | D 
AO | E 
J | F 
AX | G 
AZ | H 
AQ | I 
AR | J 
BB | K 
BC | L 
AT | M 
AS | N 
AU | O 
AV | P 
AW | Q 
BA | R 
AY | S 
BJ | T 
BY | U 
BF | V 
CA | W 
CB | X 
BG | Y 
BZ | Z 
CC | AA 
B | AB 
C | AC 
D | AD 
E | AE 
CU | AF 
BH | AG 
BI | AH 
CW | AI 
BX | AJ 
BW | AK 
BV | AL 
DC | AM 
DA | AN 
DB | AO 
K | AP 
BK | AQ 
BL | AR 
BM | AS 
BN | AT 
BO | AU 
BP | AV 
BQ | AW 
BR | AX 
BS | AY 
BT | AZ 
BU | BA 
CZ | BB 
AP | BC 
BD | BD 
AF | BE 
CE | BF 
CF | BG 
CG | BH 
CT | BI 
A | BJ 
BE | BK 
N | BL 
O | BM 
CH | BN 
CI | BO 
CJ | BP 
CK | BQ 
CL | BR 
CM | BS 
CN | BT 
CO | BU 
CP | BV 
CQ | BW 
CR | BX 
CS | BY 
F | BZ 
G | CA 
H | CB 
I | CC 
R | CD 
P | CE 
AI | CF 
AM | CG 
AB | CH 
AK | CI 
AE | CJ 
W | CK 
M | CL 
S | CM 
Q | CN 
Y | CO 
AN | CP 
V | CQ 
AJ | CR 
T | CS 
AL | CT 
AD | CU 
Z | CV 
AC | CW 
U | CX 
CV | CY 
AA | CZ 
CY | DA 
X | DB 
CX | DC 

Ich habe versucht, den Code, dass stützen, aber wie ich schnell gelernt, nach einer Spalte zu bewegen, sind alle Verfahren Spalten verschieben. Totales Versagen! Ich bin verzweifelt nach Ideen !!

+3

Es wird viel einfacher sein, alle Spalten in der gewünschten Reihenfolge auf ein neues Blatt zu kopieren. Auf diese Weise müssen Sie die verschiebenden Spalten nicht verwalten. Zu Ihrer Information: Wenn Sie Ihren vorhandenen Code hinzufügen (auch wenn dieser Probleme aufweist), erhalten Sie hier eher Hilfe. –

+0

In Zukunft poste bitte deine Code Versuche mit deiner Frage. Der Arbeitscode sollte in [CodeReview] (http://codereview.stackexchange.com/) veröffentlicht werden. Danke –

Antwort

1

Excel ermöglicht das Sortieren von Spalten. Sie müssen das Array NewOrder anpassen, aber es wird die Daten in weniger als 1 Sekunde sortieren.

Sub SortColumns() 
    Application.ScreenUpdating = False 
    Const SHEET_NAME As String = "Sheet1" 
    Dim Target As Range 
    Dim NewOrder As Variant 
    NewOrder = Array(12, 34, 82, 33, 41, 10, 50, 52, 43, 44, 54, 55, 46, 45, 47, 48, 49, 53, 51, 62, 77, 58, 79, 80, 59, 78, 81, 2, 3, 4, 5, 99, 60, 61, 101, 76, 75, 74, 107, 105, 106, 11, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 104, 42, 56, 32, 83, 84, 85, 98, 1, 57, 14, 15, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 6, 7, 8, 9, 18, 16, 35, 39, 28, 37, 31, 23, 13, 19, 17, 25, 40, 22, 36, 20, 38, 30, 26, 29, 21, 100, 27, 103, 24, 102) 
    With ThisWorkbook.Worksheets(SHEET_NAME) 
     .Rows(1).Insert Shift:=xlDown 
     .Range("A1").Resize(1, UBound(NewOrder) + 1).Value = NewOrder 
     Set Target = .Range("A1").CurrentRegion 
     .Sort.SortFields.Clear 
     .Sort.SortFields.Add Key:=Target.Rows(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
          xlSortNormal 
     With .Sort 
      .SetRange Target 
      .Header = xlYes 
      .MatchCase = False 
      .Orientation = xlLeftToRight 
      .SortMethod = xlPinYin 
      .Apply 
     End With 
     .Rows(1).Delete Shift:=xlUp 
    End With 
    Application.ScreenUpdating = True 
End Sub 
+0

Ehrfürchtig! Kannst du möglicherweise erweitern, was du unter "das NewOrder-Array anpassen" meinst? Vergib mir, aber sehr viel Neuling hier. – user7287846

+0

Macht Sinn! Ich aktualisierte entsprechend: NewOrder = Array (62, 28, 29, 30, 31, 78, 79, 80, 81, 6, 42, 1, 90, 64, 65, 83, 92, 82, 91, 97, 102, 95, 89, 107, 93, 100, 104, 86, 101, 99, 88, 57, 4, 2, 84, 96, 87, 98, 85, 94, 5, 55, 9, 10, 14, 13, 15, 16, 17, 7, 19, 8, 18, 11, 12, 56, 63, 22, 25, 33, 34, 20, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 38, 37, 36, 21, 26, 23, 24, 27, 3, 58, 59, 60, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 61, 32, 103, 35, 109, 105, 54, 40, 41, 39) .. Aber nach dem Ausführen des Makros bleibt mein Blatt unverändert. – user7287846

+0

Ich bin so dankbar für Ihre Hilfe! Meine Daten sind vertraulich, deshalb ist das Beste, was ich Ihnen anbieten kann, ein Blatt von Spalte A, Spalte B, etc .. kann Daten/Header in A1 bis DC1 bestätigen. – user7287846

Verwandte Themen