![¿Cómo divido un número en una sola celda que no tiene comas y lo pongo en varias filas?](https://rvso.com/image/1452247/%C2%BFC%C3%B3mo%20divido%20un%20n%C3%BAmero%20en%20una%20sola%20celda%20que%20no%20tiene%20comas%20y%20lo%20pongo%20en%20varias%20filas%3F.png)
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.
- Cree una tabla que no sea más que una lista de números: ¿
1, 2, 3, 4, ... n
dónden
está la mayor cantidad de elementos que jamás habría en su archivoIMAGELIST
. Sin embargo, no es un costo muy alto hacerlo más grande de lo necesario, así que sube a 50 o algo así. - Cree una consulta que extraiga su tabla original y la tabla de números.sin uniones. Si lo hiciera
SELECT *
en este punto, obtendrían
copias de cada registro en su tabla original. - En lugar de introducir el
IMAGELIST
campo, agregue una fórmula que realice laMID
función en elIMAGELIST
campo según el valor de su tabla de números. - Filtre para mostrar solo los registros donde la fórmula no devuelve una cadena en blanco. Esto significará que un registro con
IMAGELIST
24 caracteres solo aparecerá 3 veces en lugar den
veces 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, Table1
está su tabla original, Table2
es la tabla de números, Number
es el único campo Table2
y son solo los números 1-n, y agregué el campo de numeración automática ID
solo Table1
para ordenar.
Todo esto supone que cada elemento IMAGELIST
tiene 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 Sheet1
encabezados 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
Sheet1
aSheet2
.
- y arrastre hacia la derecha para cubrir todas las columnas (es decir, hasta Column
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 ColumnaD
). - En algún momento querrás formatear las
Sheet2
columnas correctamente (es decir, las que contienen fechas).
- y arrastre hacia la derecha para cubrir todas las columnasexcepto por
E2
→=LEFT($G2, 8)
F2
→2
G2
→=OFFSET(Sheet1!E$1, $F2-1, 0)
- (Esto es lo mismo que las fórmulas en Columnas
A
-D
, excepto la referenciaSheet1
a ColumnaE
).
- (Esto es lo mismo que las fórmulas en Columnas
H2
→=RIGHT($G2, LEN($G2)-8)
Arrastre/rellene la fila 2 a la fila 3. Luego cambie
F3
para=IF(H2<>"", F2, F2+1)
yG3
a=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
F
indica en qué filaSheet1
estela fila (enSheet2
) está extrayendo datos. - Cada vez que avanzamos a una nueva
Sheet1
fila (es decir, cada vez que la columnaF
aumenta), la columnaG
se completa, 8×norte-valor de dígitos largosIMAGELIST
deSheet1
. - El valor en Columna
G
se divide: los primeros ocho dígitos en ColumnaE
y el resto en ColumnaH
. - Siempre que tengamos un resto no vacío en Columna
H
, lo copiamos en ColumnaG
y dejamos ColumnaF
igual (es decir, accediendo a la misma fila enSheet1
). - Cuando nos quedamos sin datos en Column
H
, eso significa que hemos descompuesto un 8×norte-valor de un dígito de largoIMAGELIST
desdeSheet1
dentronortefilas enSheet2
, por lo que incrementamos la columnaF
y recuperamos el siguienteIMAGELIST
valor.
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?