Proste makro VBA do transponowania jednej kolumny do wielu kolumn
Komentowałem każdy krok, więc łatwo dostosować makro do własnych potrzeb.
Możesz wybrać kolumnę danych i liczbę kolumn po transpozycji
- Otwórz edytor Excel i VBA za pomocą Alt+F11
- W lewym okienku wklej kod pod arkuszem, w którym znajdują się Twoje dane
- Zmodyfikuj pierwsze dwa wiersze zgodnie ze swoimi potrzebami
- Uruchom makro za pomocą F5
Const strCol = "B" '## select the column with your data
Const iTrans = 4 '## select how many columns you want after transposing
Sub transposeColumn()
'## search the last row to know how many cells we have to iterate through
iLastrow = Range(strCol & ActiveSheet.Rows.Count).End(xlUp).Row
iCol = Range(strCol & 1).Column
'## begin to loop through the chosen column
'## Cause we delete cells on every loop, we need to divide the loop counter
'## And since the division result isn't an integer, we have to round up
For i = 1 To WorksheetFunction.RoundUp(iLastrow / iTrans, 0)
'## set the source and target range for easier access later
Set rngSrc = Range(Cells(i + 1, iCol), Cells(i + iTrans - 1, iCol))
Set rngTrg = Range(Cells(i, iCol + 1), Cells(i, iCol + iTrans - 1))
'## set the format of target range to text
rngTrg.NumberFormat = "@"
'## copy and paste the values, the trick is to use transpose
rngSrc.Copy
rngTrg.PasteSpecial Transpose:=True
'## delete all cells which we have just transposed
rngSrc.Delete shift:=xlUp
Next i
End Sub
Skrypt awk pomoże rozwiązać problem.
Pierwszy skrypt pętli awk zajmuje się liczbami aż do końcowej wielokrotności czterech. Druga pętla wypisuje kilka ostatnich liczb. Jeśli jest to ostatni numer, przecinek końcowy nie jest drukowany.
źródło
Oto rozwiązanie funkcji arkusza roboczego. Gdzie jest twoja lista
A1:A40
:Jest to wpisane
C1
i wypełnione po prawej stronie,F1
a następnie w dół tyle wierszy, ile potrzebujesz.Konieczne będzie dostosowanie formuły do arkusza.
Na przykład, jeśli chcesz, aby wiersze wyjściowe zaczynały się od
C2
, drugi argumentINDEX
funkcji powinien być(ROW()-2)*4+COLUMN()-2
.Jeśli
D1
zamiast tego chcesz, aby wiersze wyjściowe zaczynały się od , drugim argumentemINDEX
funkcji powinno być(ROW()-1)*4+COLUMN()-3
.EDYCJA:
Właśnie widziałem, że chcesz wynik rozdzielany przecinkami. Jest to trochę hackerskie, ponieważ
CONCATENATE
nie może przyjmować argumentów tablicowych, ale zadziała. Wystarczy wypełnić następujący wzór w kolumnie.Jest to zależne od danych wyjściowych rozpoczynających się w wierszu 1. Jeśli na przykład dane wyjściowe zaczynają się w wierszu 2, musisz zmienić każdą instancję
ROW()-1
naROW()-2
.źródło