¿Cómo divido un número en una sola celda que no tiene comas y lo pongo en varias filas?

¿Cómo divido un número en una sola celda que no tiene comas y lo pongo en varias filas?

Así que esto es lo que estoy buscando hacer. Tengo una hoja de cálculo con una celda que tiene una cadena de números (algunos son más largos que otros). Necesito extraer cada ocho números y colocarlos en filas individuales.

Así es como se ve la hoja de cálculo actual:

IFIELD1     IFIELD2   IFIELD3     IFIELD4    IMAGELIST
05/30/2009  ERMS      100 Day     L. C.      0000001200000013
05/30/2009  ESE       20 Day      J. R.      0000001400000015
05/30/2009  IHS       100 Day     H. W.      00000016
05/30/2009  LMS       100 Day     D. E.      0000001700000018

Esto es lo que estoy buscando conseguir:

IFIELD1     IFIELD2   IFIELD3   IFIELD4   IMAGELIST
05/30/2009  ERMS    100 Day     L. C.     00000012
05/30/2009  ERMS    100 Day     L. C.     00000013
05/30/2009  ESE     20 Day      J. R.     00000014
05/30/2009  ESE     20 Day      J. R.     00000015
05/30/2009  IHS     100 Day     H. W.     00000016
05/30/2009  LMS     100 Day     D. E.     00000017
05/30/2009  LMS     100 Day     D. E.     00000018

Algunos números de juego llegan hasta 30 o más grupos de 8 en una línea. Con más de 1000 filas de datos para separar. ¿Existe algún tipo de código que ayude a que este proceso sea menos desalentador? Actualmente estoy usando Left, mid y right, pero me llevará años terminarlo. Las hojas de trabajo están fuera de acceso, por lo que si hay una manera más fácil de completarlas allí, estoy abierto a sugerencias. El producto final debe guardarse en un csv. También necesito conservar los 8 dígitos completos del producto completo antes de guardarlo como csv para poder crear el enlace donde se encuentra esa imagen. ¡Gracias por su ayuda!

Respuesta1

Hay una solución bastante sencilla en Access.

  1. Cree una tabla que no sea más que una lista de números: ¿ 1, 2, 3, 4, ... ndónde nestá la mayor cantidad de elementos que jamás habría en su archivo IMAGELIST. Sin embargo, no es un costo muy alto hacerlo más grande de lo necesario, así que sube a 50 o algo así.
  2. Cree una consulta que extraiga su tabla original y la tabla de números.sin uniones. Si lo hiciera SELECT *en este punto, obtendría ncopias de cada registro en su tabla original.
  3. En lugar de introducir el IMAGELISTcampo, agregue una fórmula que realice la MIDfunción en el IMAGELISTcampo según el valor de su tabla de números.
  4. Filtre para mostrar solo los registros donde la fórmula no devuelve una cadena en blanco. Esto significará que un registro con IMAGELIST24 caracteres solo aparecerá 3 veces en lugar de nveces con un montón de registros en blanco.

Aquí está el SQL para esa consulta:

SELECT Table1.ID, Table1.IFIELD1, Table1.IFIELD2, Table1.IFIELD3, Table1.IFIELD4, Table2.Number, Mid([IMAGELIST],([Number]-1)*8+1,8) AS ImageListParse
FROM Table1, Table2
WHERE Mid([IMAGELIST],([Number]-1)*8+1,8)<>""
ORDER BY Table1.ID, Table2.Number;

En mi maqueta rápida, Table1está su tabla original, Table2es la tabla de números, Numberes el único campo Table2y son solo los números 1-n, y agregué el campo de numeración automática IDsolo Table1para ordenar.

Todo esto supone que cada elemento IMAGELISTtiene exactamente 8 caracteres. Si varía en longitud, este enfoque no funcionará.

Respuesta2

Esto no es muy difícil de hacer con las funciones de la hoja de cálculo de Excel. Supongamos que sus datos tienen Sheet1encabezados en la fila 1. Crear Sheet2. Rellénelo de la siguiente manera:

  • A1=Sheet1!A1
    • y arrastre hacia la derecha para cubrir todas las columnas (es decir, hasta Column  E, según su ejemplo de cinco columnas),
    • o simplemente copie los encabezados de Sheet1a Sheet2.
  • A2=OFFSET(Sheet1!A$1, $F2-1, 0)
    • y arrastre hacia la derecha para cubrir todas las columnasexcepto por IMAGELIST (es decir, a través de Columna  D).
    • En algún momento querrás formatear las Sheet2columnas correctamente (es decir, las que contienen fechas).
  • E2=LEFT($G2, 8)
  • F22
  • G2=OFFSET(Sheet1!E$1, $F2-1, 0)
    • (Esto es lo mismo que las fórmulas en Columnas  A- D, excepto la referencia Sheet1a Columna  E).
  • H2=RIGHT($G2, LEN($G2)-8)

Arrastre/rellene la fila 2 a la fila 3. Luego cambie

  • F3para =IF(H2<>"", F2, F2+1)y
  • G3a=IF(H2<>"", H2, OFFSET(Sheet1!E$1, $F3-1, 0))

Ahora arrastre/rellene la fila 3 hacia abajo para obtener tantas filas como necesite para obtener todos los datos Sheet1:

Luego copie y pegue valores y formatos.

Explicación:

  • La columna  Findica en qué filaSheet1 estela fila (en Sheet2) está extrayendo datos.
  • Cada vez que avanzamos a una nueva Sheet1fila (es decir, cada vez que la columna  Faumenta), la columna  Gse completa, 8×norte-valor de dígitos largos IMAGELISTde Sheet1.
  • El valor en Columna  Gse divide: los primeros ocho dígitos en Columna  Ey el resto en Columna  H.
  • Siempre que tengamos un resto no vacío en Columna  H, lo copiamos en Columna  Gy dejamos Columna  Figual (es decir, accediendo a la misma fila en Sheet1).
  • Cuando nos quedamos sin datos en Column  H, eso significa que hemos descompuesto un 8×norte-valor de un dígito de largo IMAGELISTdesde Sheet1dentronortefilas en Sheet2, por lo que incrementamos la columna  Fy recuperamos el siguiente IMAGELISTvalor.

Respuesta3

Hay dos pasos que debes seguir para lograr tu objetivo:

1 divido los números en diferentes columnas, por ejemplo, en Excel 2010: datos - texto en columnas - ancho fijo - establezca el ancho en 8 y luego haga clic en finalizar.

2 El segundo paso es desvincular tus datos, lamentablemente no es sencillo, pero hay muchas soluciones en Internet, como esta:¿Es posible "despivotar" o "pivotar inverso" en Excel?

información relacionada