Cadena delimitada "dividida", conservando entradas en blanco

10

Estoy tratando de usar las funciones SPLITy JOINen las Hojas de cálculo de Google (la nueva versión) para manipular algunos datos, y estoy teniendo problemas porque SPLITno está preservando las entradas en blanco.

La fuente de datos se configura así, esencialmente:

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

(Las entradas en blanco en este conjunto de datos representan "ninguna medición", que es distinta de una medición de 0)

En las columnas Ay Cobtengo el resultado que quiero usando la fórmula:

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

Eso produce una fila que va, como se esperaba q s u w r t v x, cada uno en su propia celda.

Sin embargo, este método no funciona en columnas By D. JOINfunciona como se esperaba, dando la salida:

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

SPLITSin embargo, realizar esa salida da como resultado un problema: me quedo con 5 8 3 2 4 6, sin celdas vacías entre 5y 8o entre 4y 6, lo que significa que los pares se dividen (por ejemplo, sy vdeberían corresponder a celdas vacías, pero en su lugar wy xhacer). El problema parece ser que SPLITse interpreta ~~como un delimitador único, en lugar de dos delimitadores con una entrada nula entre ellos.

¿Alguien sabe cómo preservar las entradas en blanco en este tipo de escenario?

El resultado deseado se vería así

q  s  u  w  r  t  v  x
5     8  3  2  4     6
Artista Liberal
fuente
¿Un espacio en esos campos vacíos solucionaría el problema?
cerveza
Escribir "" hace que se conserve la entrada en blanco (¡gracias, @AlE.!), Pero aún sería preferible tener una solución tecnológica, sobre todo porque escribir manualmente "" en todas esas entradas requeriría mucho tiempo y mucho tiempo. propenso a errores.
LiberalArtist
Las fórmulas de hoja de cálculo no son mi fuerte. Quizás se pueda hacer algo IF()para convertir automáticamente los campos vacíos en espacios.
cerveza
1
Actualización: la idea de @ AlE me permitió hacer el cálculo en el término inmediato al usar =ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))para hacer un conjunto ficticio de columnas con "" en las celdas en blanco, que luego se usan para SPLITy JOIN. Sin embargo, todavía espero que alguien tenga una solución más elegante: esto agrega un montón de cosas adicionales a mi documento, y todavía necesita que actualice los números de fila en algunos lugares diferentes a medida que se agregan más mediciones al conjunto de datos. (¡Gracias a AI E. por al menos permitirme analizar los datos por ahora!)
LiberalArtist

Respuestas:

3

Prueba la siguiente solución.

Fórmula

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

Explicado

Ya nos mostró que la SPLITfunción ignora las celdas vacías, por lo tanto eligen esta cadena como delimitador: " ,". El resultado intermedio de la JOINfunción se ve así:
ingrese la descripción de la imagen aquí

Elijo el delimitador para la SPLITfunción de ser la siguiente: ",". El resultado intermedio de la SPLITfunción se ve así:
ingrese la descripción de la imagen aquí

Ahora, sin embargo, tenemos que lidiar con los espacios en blanco adicionales agregados. Por lo tanto, utilicé la TRIMfunción para eliminar todos los espacios en blanco al final o al final (en combinación con ARRAYFORMULA). Compare los LENvalores de cada resultado intermedio.

Resultado

ingrese la descripción de la imagen aquí

Ejemplo

He creado un archivo de ejemplo para usted: SPLIT para preservar celdas en blanco

Jacob Jan Tuinstra
fuente
2

Prueba la siguiente solución.

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

ingrese la descripción de la imagen aquí

Agregue tantos rangos a la función como desee y se procesarán. Agregue este pequeño script al editor de script de su hoja de cálculo (Herramientas> Editor de script; presione el botón Guardar).

Ejemplo

He creado un archivo de ejemplo para usted: SPLIT para preservar celdas en blanco

Jacob Jan Tuinstra
fuente
2

Respuesta corta

La siguiente fórmula devuelve el resultado deseado.

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

Respuesta extendida

Esta respuesta se centra en proporcionar una forma de obtener el resultado deseado en lugar de discutir cómo hacer que el enfoque elegido funcione.

El problema XY

El OP quiere obtener X y piensa que Y debería devolver ese resultado. Este enfoque es problemático porque Y tiene algunas advertencias. Este podría ser un problema importante ya que el OP pregunta sobre cómo hacer que Y funcione en lugar de pedir una forma de obtener X, pero no es tan grande porque proporciona el contexto y el resultado deseado.

Solución

Google Sheets es capaz de manejar resultados de valores múltiples de una manera muy simple desde el punto de vista de los usuarios finales. Por otro lado, permite utilizar una notación especial para permitir a los usuarios finales definir matrices.

Las características anteriores permiten obtener el resultado esperado sin el uso de las funciones SPLIT () y JOIN () y sin las advertencias inherentes a ellas.

Explicación de la fórmula

{A1:B4;C1:D4}

Es una matriz de 2 X 8 hecha por dos matrices / rangos de 2 X 4. El punto y coma ( ;) se utiliza suponiendo que el separador decimal de la hoja de cálculo es un punto ( .). Si el separador decimal fuera una coma, reemplácelo por una barra diagonal inversa ( \).

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

Convierte la matriz 2 X 8 en una matriz 8 X 2.

Una de las ventajas de este método es que no requiere un manejo especial de las celdas en blanco. Otras ventajas son que es una fórmula muy compacta y es muy fácil de adaptar.

Referencias

Rubén
fuente
1

Si se une y hace que el delimitador sea "," básicamente una coma con un espacio anterior, conservará automáticamente ese espacio cuando lo divida nuevamente:

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