Oferuję dwie wersje, w zależności od tego, czy należy zachować puste komórki. Podstawowa idea jest taka sama:
- Wybierz postać, której nie ma w tabeli (np. Egzotyczną postać Unicode dostępną za pośrednictwem
CHAR
).
- Użyj go w
JOIN
poleceniu dla każdej z trzech kolumn.
- Połącz wyniki, dodając znak pomiędzy.
SPLIT
połączony ciąg tego samego znaku.
TRANSPOSE
wynik.
Na przykład:
=TRANSPOSE( SPLIT( JOIN(CHAR(57344),A1:A) &CHAR(57344)& JOIN(CHAR(57344),B1:B) &CHAR(57344)& JOIN(CHAR(57344),C1:C), CHAR(57344) ) )
gdzie do łączenia / dzielenia, wybrałem znak CHAR(57344)
, który jest przeznaczony do użytku prywatnego, a zatem nie powinien być obecny w żadnych prawidłowych danych wejściowych.
Powyższa formuła usuwa puste wpisy , ponieważ tak właśnie SPLIT
działa. Może to być wygodne, jeśli dane nie mają pustych miejsc: oszczędza kłopotów ze śledzeniem, gdzie znajduje się ostatni wiersz danych. Ale innym razem należy zachować puste miejsca.
Aby zachować puste miejsca, podążam za odpowiedzią Jacoba Jana Tuinstry, tyle że użyłem innego prywatnego użytku Unicode zamiast spacji (kto wie, może masz jakieś komórki zawierające tylko spację i chcesz je zachować). Wymaga to dwóch dodatkowych kroków: po połączeniu wszystkiego jak poprzednio, używam SUBSTITUTE
do zamiany CHAR(57344)
przez CHAR(57344)&CHAR(57345)
, a następnie dzielę jak poprzednio i zastępuję CHAR(57345)
pustym ciągiem.
=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(...joins... , CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "")))
Pełny wynik wygląda tak (zauważ, że teraz określam, gdzie jest ostatni wiersz danych):
=TRANSPOSE( ARRAYFORMULA(SUBSTITUTE( SPLIT( SUBSTITUTE(JOIN(CHAR(57344),A1:A9) &CHAR(57344)& JOIN(CHAR(57344),B1:B9) &CHAR(57344)& JOIN(CHAR(57344),C1:C9), CHAR(57344),CHAR(57344)&CHAR(57345)), CHAR(57344) ), CHAR(57345), "" )))
Jeszcze jedno zastrzeżenie: ciągi znaków w Arkuszach Google nie mogą przekraczać 50000 znaków. Jeśli twoje dane są zbyt duże, aby można było zastosować podejście oparte na łańcuchach, użyj skryptu ( ten jest dobrym miejscem na rozpoczęcie).