Ciąg rozdzielany „podzielony”, zachowując puste wpisy

10

Próbuję używać funkcji SPLITi JOINw Arkuszach Google (nowa wersja) do manipulowania niektórymi danymi i mam problemy, ponieważ SPLITnie zachowuję pustych pozycji.

Źródło danych jest skonfigurowane w następujący sposób:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(Puste wpisy w tym zestawie danych oznaczają „brak pomiaru”, który różni się od pomiaru 0)

W kolumnach Ai Cuzyskuję pożądany wynik za pomocą formuły:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

W ten sposób powstaje wiersz zgodny z oczekiwaniami q s u w r t v x, każdy w osobnej komórce.

Jednak ta metoda nie działa na kolumnach Bi D. JOINdziała zgodnie z oczekiwaniami, dając wynik:

5~~8~3~2~4~~6

Wykonywanie SPLITtych danych wyjściowych powoduje jednak problem: jestem z 5 8 3 2 4 6, bez pustych komórek pomiędzy 5i 8lub pomiędzy 4i 6, co oznacza, że ​​pary są podzielone (np. sI vpowinny odpowiadać pustym komórkom, ale zamiast tego wi xzrobić). Problem polega na tym, że SPLITinterpretuje się go ~~jako pojedynczy separator, a nie jako dwa separatory z pustym wpisem między nimi.

Czy ktoś wie, jak zachować puste wpisy w tego rodzaju scenariuszu?

Pożądany wynik wyglądałby tak

q  s  u  w  r  t  v  x
5     8  3  2  4     6
LiberalArtist
źródło
Czy spacja w tych pustych polach rozwiązałaby problem?
ale
Wpisanie „” powoduje zachowanie pustego wpisu (dzięki, @AlE.!), Ale nadal byłoby lepiej mieć rozwiązanie technologiczne, zwłaszcza dlatego, że ręczne wpisanie „” we wszystkich tych wpisach byłoby bardzo czasochłonne i Skłonność do błędu.
LiberalArtist
Formuły arkuszy kalkulacyjnych nie są moją mocną stroną. Być może można coś zrobić, IF()aby automatycznie przekonwertować puste pola na spacje.
ale
1
Aktualizacja: pomysł @ AlE. Pozwolił mi wykonać obliczenia w najbliższym czasie, używając =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))do stworzenia pustego zestawu kolumn z „” w pustych komórkach, które są następnie używane dla SPLITi JOIN. Nadal mam nadzieję, że ktoś ma bardziej eleganckie rozwiązanie: dodaje to kilka dodatkowych rzeczy do mojego dokumentu i nadal wymaga ode mnie aktualizacji numerów wierszy w kilku różnych miejscach, ponieważ do zestawu danych dodaje się więcej pomiarów. (Dzięki AI E. za przynajmniej pozwolenie mi na razie
zebranie

Odpowiedzi:

3

Wypróbuj następujące rozwiązanie.

Formuła

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

Wyjaśnione

Już pokazał nam, że SPLITfunkcja ignoruje puste komórki, dlatego wybrałem ten ciąg jako ogranicznik: " ,". Wynik pośredni JOINfunkcji wygląda następująco:
wprowadź opis zdjęcia tutaj

Wybieram ogranicznik dla SPLITfunkcji, aby być w ten sposób: ",". Wynik pośredni SPLITfunkcji wygląda następująco:
wprowadź opis zdjęcia tutaj

Teraz jednak mamy do czynienia z dodatkowymi białymi spacjami. Dlatego użyłem tej TRIMfunkcji, aby usunąć wszystkie końcowe lub białe spacje (w połączeniu z ARRAYFORMULA). Porównaj LENwartości każdego wyniku pośredniego.

Wynik

wprowadź opis zdjęcia tutaj

Przykład

Stworzyłem dla Ciebie przykładowy plik: SPLIT, aby zachować puste komórki

Jacob Jan Tuinstra
źródło
2

Wypróbuj następujące rozwiązanie.

Kod

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

Stosowanie

wprowadź opis zdjęcia tutaj

Dodaj dowolną liczbę zakresów do funkcji, a zostaną one przetworzone. Dodaj ten mały skrypt do edytora skryptów w arkuszu kalkulacyjnym (Narzędzia> Edytor skryptów; Naciśnij przycisk Zapisz).

Przykład

Stworzyłem dla Ciebie przykładowy plik: SPLIT, aby zachować puste komórki

Jacob Jan Tuinstra
źródło
2

Krótka odpowiedź

Poniższa formuła zwraca pożądany wynik.

=Transpose({A1:B4;C1:D4})

Rozszerzona odpowiedź

Ta odpowiedź skupia się na zapewnieniu sposobu uzyskania pożądanego rezultatu, zamiast na omawianiu sposobu wyboru wybranego podejścia do pracy.

Problem XY

OP chce zdobyć X i uważa, że ​​Y powinien zwrócić ten wynik. Takie podejście jest problematyczne, ponieważ Y ma pewne zastrzeżenia. Może to być problem burmistrza, ponieważ OP pyta, jak sprawić, by Y działał, zamiast pytać o sposób uzyskania X, ale nie jest tak duży, ponieważ zapewnia kontekst i pożądany wynik.

Rozwiązanie

Arkusze Google są w stanie obsługiwać wyniki o wielu wartościach w bardzo prosty sposób z punktu widzenia użytkowników końcowych. Z drugiej strony pozwala na użycie specjalnej notacji, aby umożliwić użytkownikom końcowym definiowanie tablic.

Powyższe cechy umożliwiają uzyskanie oczekiwanego wyniku bez użycia funkcji SPLIT () i JOIN () oraz bez związanych z nimi zastrzeżeń.

Wyjaśnienie formuły

{A1:B4;C1:D4}

Jest to tablica 2 X 8 utworzona przez dwie tablice / zakresy 2 X 4. Średnik ( ;) jest stosowany przy założeniu, że separatorem dziesiętnym arkusza kalkulacyjnego jest kropka ( .). Jeśli separatorem dziesiętnym był przecinek, zastąp go ukośnikiem odwrotnym ( \).

=Transpose({A1:B4;C1:D4})

Konwertuje tablicę 2 X 8 na tablicę 8 X 2.

Jedną z zalet tej metody jest to, że nie wymaga ona specjalnego obchodzenia się z pustymi komórkami. Inne zalety to to, że jest to bardzo kompaktowa formuła i bardzo łatwo ją dostosować.

Bibliografia

Ruben
źródło
1

Jeśli dołączysz i sprawisz, że separatorem będzie „”, w zasadzie przecinek z poprzedzającym spacją, automatycznie zachowa to miejsce po ponownym podzieleniu:

=SPLIT(JOIN(" ,",A1:A4),",")
Aurielle Perlmann
źródło