Sequência delimitada por “divisão”, preservando entradas em branco

10

Estou tentando usar as funções SPLITe JOINno Planilhas Google (a nova versão) para manipular alguns dados e estou tendo problemas porque SPLITnão preserva entradas em branco.

A fonte de dados é configurada assim, essencialmente:

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

(As entradas em branco neste conjunto de dados representam "nenhuma medida", que é diferente de uma medida de 0)

Nas colunas Ae C, estou obtendo o resultado desejado usando a fórmula:

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

Isso produz uma linha que passa, como esperado q s u w r t v x, cada uma em sua própria célula.

No entanto, esse método não funciona em colunas Be D. JOINfunciona como esperado, fornecendo a saída:

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

Realizando SPLITem que a saída, no entanto, resulta em um problema: Eu sou deixado com 5 8 3 2 4 6, sem células vazios entre 5e 8ou entre 4e 6, o que significa que os pares são divididos (por exemplo, se vdeve corresponder ao esvaziar células, mas em vez disso we xfazer). O problema parece ser SPLITinterpretar ~~como um único delimitador, e não como dois delimitadores com uma entrada nula entre eles.

Alguém sabe como preservar entradas em branco nesse tipo de cenário?

A saída desejada ficaria assim

q  s  u  w  r  t  v  x
5     8  3  2  4     6
LiberalArtist
fonte
Um espaço nesses campos vazios resolveria o problema?
ale
Digitar "" resulta na preservação da entrada em branco (obrigado, @AlE.!), Mas ainda seria preferível ter uma solução tecnológica, principalmente porque digitar manualmente "" em todas essas entradas consumiria muito tempo e propenso a erro.
LiberalArtist
Fórmulas de planilhas não são o meu forte. Talvez algo possa ser feito IF()para converter automaticamente campos vazios em espaços.
ale
1
Atualização: A idéia de @ AlE. Me permitiu fazer o cálculo no prazo imediato usando =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))para criar um conjunto fictício de colunas com "" nas células em branco, que são usadas para SPLITe JOIN. Porém, ainda espero que alguém tenha uma solução mais elegante: isso adiciona um monte de coisas extras ao meu documento e ainda é necessário que eu atualize os números das linhas em alguns lugares diferentes, à medida que mais medidas são adicionadas ao conjunto de dados. (Graças a AI E., pelo menos, deixar-me triturar os dados por agora!)
LiberalArtist

Respostas:

3

Tente a seguinte solução.

Fórmula

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

Explicado

Você já nos mostrou que a SPLITfunção ignora células vazias, portanto, eu escolher essa string como delimitador: " ,". O resultado intermediário da JOINfunção é assim:
insira a descrição da imagem aqui

I escolher o delimitador para a SPLITfunção a ser esta: ",". O resultado intermediário da SPLITfunção é assim:
insira a descrição da imagem aqui

Agora, no entanto, temos que lidar com os espaços em branco extras. Portanto, usei a TRIMfunção para remover todos os espaços em branco à direita ou à esquerda (em combinação com o ARRAYFORMULA). Compare os LENvalores de cada resultado intermediário.

Resultado

insira a descrição da imagem aqui

Exemplo

Eu criei um arquivo de exemplo para você: SPLIT para preservar células em branco

Jacob Jan Tuinstra
fonte
2

Tente a seguinte solução.

Código

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];
}

Uso

insira a descrição da imagem aqui

Adicione quantos intervalos desejar à função e eles serão processados. Adicione esse pequeno script ao editor de scripts da sua planilha (Ferramentas> Editor de scripts; pressione o botão Salvar).

Exemplo

Eu criei um arquivo de exemplo para você: SPLIT para preservar células em branco

Jacob Jan Tuinstra
fonte
2

Resposta curta

A fórmula a seguir retorna o resultado desejado.

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

Resposta estendida

Essa resposta é focada em fornecer uma maneira de obter o resultado desejado, em vez de discutir como fazer a abordagem escolhida funcionar.

O problema XY

O OP deseja obter X e acha que Y deve retornar esse resultado. Essa abordagem é problemática porque Y tem algumas ressalvas. Isso pode ser um problema maior, já que o OP pergunta sobre como fazer Y funcionar, em vez de pedir uma maneira de obter o X, mas não é tão grande porque fornece contexto e o resultado desejado.

Solução

O Planilhas Google pode lidar com resultados com vários valores de uma maneira muito simples do ponto de vista dos usuários finais. Por outro lado, permite usar uma notação especial para permitir que os usuários finais definam matrizes.

Os recursos acima possibilitam obter o resultado esperado sem o uso das funções SPLIT () e JOIN () e sem as advertências inerentes a elas.

Explicação da fórmula

{A1:B4;C1:D4}

É uma matriz 2 X 8 feita por duas matrizes / faixas 2 X 4. O ponto-e-vírgula ( ;) é usado assumindo que o separador decimal da planilha é um ponto ( .). Se o separador decimal fosse uma vírgula, substitua-o por uma barra invertida ( \).

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

Converte a matriz 2 X 8 em uma matriz 8 X 2.

Uma das vantagens desse método é que ele não requer tratamento especial de células em branco. Outras vantagens são que é uma fórmula muito compacta e muito fácil de adaptar.

Referências

Rubén
fonte
1

Se você ingressar e fazer com que o delimitador seja "," basicamente uma vírgula com um espaço anterior, ele preservará automaticamente esse espaço quando você o dividir novamente:

=SPLIT(JOIN(" ,",A1:A4),",")
Aurielle Perlmann
fonte