Schmelzen / Umformen in Excel mit VBA?

Ich passe mich gerade an einen neuen Job an, bei dem die meiste Arbeit, die ich mit Kollegen teile, über MS Excel erfolgt. Ich benutze häufig Pivot-Tabellen und benötige daher "gestapelte" Daten, genau die Ausgabe dermelt() Funktion in derreshape (reshape2) -Paket in R, auf das ich mich verlasse.

Könnte jemand mich mit einem VBA-Makro anfangen, um dies zu erreichen, oder existiert bereits eines?

Der Umriss des Makros wäre:

Wählen Sie einen Zellbereich in einer Excel-Arbeitsmappe aus.Starten Sie das Makro "melt".Das Makro erstellt die Eingabeaufforderung "Geben Sie die Anzahl der ID-Spalten ein", in der Sie die Anzahl der Spalten vor den identifizierenden Informationen eingeben. (Für den unten stehenden Beispiel-R-Code ist es 4).Erstellen Sie in der Excel-Datei ein neues Arbeitsblatt mit dem Titel "melt", in dem die Daten gestapelt werden, und erstellen Sie eine neue Spalte mit dem Titel "variable", die den Datenspaltenüberschriften der ursprünglichen Auswahl entspricht.

Mit anderen Worten, die Ausgabe würde genauso aussehen wie die Ausgabe der einfachen Ausführung dieser beiden Zeilen in R:

require(reshape)
melt(your.unstacked.dataframe, id.vars = 1:4)

Hier ist ein Beispiel:

# unstacked data
> df1
  Year Month Country  Sport No_wins No_losses High_score Total_games
2 2010     5     USA Soccer       4         3          5           9
3 2010     6     USA Soccer       5         3          4           8
4 2010     5     CAN Soccer       2         9          7          11
5 2010     6     CAN Soccer       4         8          4          13
6 2009     5     USA Soccer       8         1          4           9
7 2009     6     USA Soccer       0         0          3           2
8 2009     5     CAN Soccer       2         0          6           3
9 2009     6     CAN Soccer       3         0          8           3

# stacking the data
> require(reshape)
> melt(df1, id.vars=1:4)

  Year Month Country  Sport    variable value
1  2010     5     USA Soccer     No_wins     4
2  2010     6     USA Soccer     No_wins     5
3  2010     5     CAN Soccer     No_wins     2
4  2010     6     CAN Soccer     No_wins     4
5  2009     5     USA Soccer     No_wins     8
6  2009     6     USA Soccer     No_wins     0
7  2009     5     CAN Soccer     No_wins     2
8  2009     6     CAN Soccer     No_wins     3
9  2010     5     USA Soccer   No_losses     3
10 2010     6     USA Soccer   No_losses     3
11 2010     5     CAN Soccer   No_losses     9
12 2010     6     CAN Soccer   No_losses     8
13 2009     5     USA Soccer   No_losses     1
14 2009     6     USA Soccer   No_losses     0
15 2009     5     CAN Soccer   No_losses     0
16 2009     6     CAN Soccer   No_losses     0
17 2010     5     USA Soccer  High_score     5
18 2010     6     USA Soccer  High_score     4
19 2010     5     CAN Soccer  High_score     7
20 2010     6     CAN Soccer  High_score     4
21 2009     5     USA Soccer  High_score     4
22 2009     6     USA Soccer  High_score     3
23 2009     5     CAN Soccer  High_score     6
24 2009     6     CAN Soccer  High_score     8
25 2010     5     USA Soccer Total_games     9
26 2010     6     USA Soccer Total_games     8
27 2010     5     CAN Soccer Total_games    11
28 2010     6     CAN Soccer Total_games    13
29 2009     5     USA Soccer Total_games     9
30 2009     6     USA Soccer Total_games     2
31 2009     5     CAN Soccer Total_games     3
32 2009     6     CAN Soccer Total_games     3

Antworten auf die Frage(5)

Ihre Antwort auf die Frage