La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/Excel/720966-Duda-Como-desconcatenar-un-dato.html

Duda: Cómo desconcatenar un dato.

Duda: Cómo desconcatenar un dato.

Publicado por Gustavo (36 intervenciones) el 23/11/2006 19:21:55
Espero alguien pueda orientarme, ya que estoy divagando para buscar la solución, pero nada....
Recibo 1 file con tabla de x columnas (siempre misma cantidad) con renglones (cant. variable en cada envío) cada celda con datos que quiero copiar en una tabla propia, con más columnas e info.
El orden o ubicaciòn de los primeros es diferente a mi tabla, con lo que no hay problema, al generar la macro.
PERO el problema está en 1 celda en especial cuyo dato es texto y número concatenado. Por lo general (por no decir siempre que es más seguro) el número está al final luego de un espacio. Sería simple usar EXTRAE con ENCONTRAR (" "), pero el problema es que hay siempre más de 1 espacio y no sabría cuál es el último para que tome la referencia, por otro lado la extensión del texto es variable con lo que tampoco puedo extraer desde una posición fija. Intento ver es EXTRAER desde la derecha, pero eso no existe (o si?)
Si pueden orientarme cómo "desconcatenar" eso se los agradezco.
Y ya depaso que pido 20, pido 21 y perdòn por abusar en consultar.
El otro tema es que puedo armar una macro para copiar cada renglòn en mi tabla, y el proceso lo haría corriendo la macro en cada renglón y no como proceso continuo, ya que la cantidad de renglones es siempre variable. Si pudiesen orientarme cómo armar la macro para que arranque desde el primer renglón y pare terminando al último, corriendo la macro solo una vez. (se me ocurre que es con "For... next", pero no se cómo gobernar el
valor tope)
Espero hallan comprendido mi consulta y espero tener una ayuda de alguno de Uds. que los elegí por ser los más consultados.
Cordialmente...

Gustavo ([email protected])

RE:Duda: Cómo desconcatenar un dato.

Publicado por lourdes (37 intervenciones) el 23/11/2006 19:42:58
buenas,

para lo de la macro, mejor te ayude otra persona, que hay muchas aquí qeu contralan muchisimo más que yo.

para lo de desconcatenar igual te sirve esto: Prueba con combinar la función extraer y la función largo, si siempre el número está al final del texto.

Ej :EXTRAE(A1;(LARGO(A1)-2);3) Extraería un número de 3 cifras situado al final de un texto de longitud cualquiera situado en celda A1.

Prueba, igual te sirve.

saludos

RE:Duda: Cómo desconcatenar un dato.

Publicado por José Luis (700 intervenciones) el 23/11/2006 20:19:21
Bueno, para extraer las tres cifras finales de una cadena de texto, se puede hacer de una forma más simple: DERECHA(A1;3)

Para tratar el fichero línea a línea debes crear una macro que abra el fichero (supongo que el fichero es de tipo texto) de forma que lea línea a línea al leerlas podrás extraer los datos que necesites.

Aqui tienes un ejemplo sobre como abrir un fichero leyendo registro a registro

http://www.lawebdelprogramador.com/news/mostrar_new.php?id=127&texto=Excel&n1=390385&n2=1&n3=1&n4=1&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

En este otro sitio pongo más links
http://www.lawebdelprogramador.com/news/mostrar_new.php?id=127&texto=Excel&n1=393988&n2=1&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0

NOTA: Si el fichero viene de Unix o Linux podría no funcionar porque los ficheros TXT de estos sistemas operativos no acaban cada línea con el terminador CRLF (que es lo que necesita el LINE INPUT) sino sólo con LF, lo que origina algunos problemas. Una solución para poner el CRLF es que, antes de abrir el fichero con la macro, se abre el fichero con el Editor de MSDOS y, sin hacer nada más lo vuelves a grabar.

Saludos

RE:Duda: Cómo desconcatenar un dato.

Publicado por Gustavo (36 intervenciones) el 23/11/2006 20:42:56
Gracias JL por tu respuesta.
En realidad me faltó decir que el file que recibo es también Excel, por lo que los datos son celdas y que se copian en otra tabla mayor con celdas.
El traspaso o copia sería sencillo, línea a línea, lo que no encuentro es cómo arrancar la primer pasada y que se sume los demás renglones en nuevos renglones de la otra tabla y que al llegar al último se detenga sola.
Se me ocurre que puedo repetir la MACRO con una sentencia en VB como:
FOR I=1 to 20
.....Macro
.....
NEXT
El tema es que no me doy cuenta cómo dar el dato de 20, ya que la cantidad de renglones es variable, pueden ser 1, 2 o todos los que sean.
Además de saber cómo finalizar y crear un nuevo renglón en la tabla destino.
De todas maneras, mucha gracias por tu interés.

Gustavo

RE:Duda: Cómo desconcatenar un dato.

Publicado por Gustavo Garassino (36 intervenciones) el 23/11/2006 20:36:05
Lourdes, gracias por tu respuesta, solo que mi consulta creo no fue
clara, ya que esa no sería la solución debido a que tanto el texto como
los números son variables, te pongo los ejemplos:
CD LIB 45
L PUB 456
CD 5467
L PUB 345
Como trampa, el segundo dato posee dos "espacios" antes del número y
como verás cada dato tiene un LARGO distinto y cantidad de números
finales distintos. Eso lleva a que no tenga que extraer 3 números siempre.
Estoy intentando con una combinaciòn de SI; TIPO, VALOR; EXTRAE;
LARGO en esa cadena, pero estoy limitado por la cadena de SI que no puede
superar 7 o 6.
De todas formas, te lo agradezco, creo que tiene que ser con algo
armado en VB.
Repito, muchas gracias por contestar y tu ayuda, tendré que seguir buscando o esperando otra ayuda.

Gustavo

RE:Duda: Cómo desconcatenar un dato.

Publicado por Dante (28 intervenciones) el 23/11/2006 23:17:55
Esta macro te sirve para sacar los números de una cadena de texto, observa como trabaja y la modificas a tu gusto.

Private Sub SoloNumero()
For i = 1 To Len(ActiveCell)
If IsNumeric(Mid(ActiveCell, i, 1)) Then
numero = numero & Mid(ActiveCell, i, 1)
End If
Next
MsgBox numero
End Sub

RE:Duda: Cómo desconcatenar un dato.

Publicado por Cesar (57 intervenciones) el 26/11/2006 02:47:31
No necesitas Visual para hacer esto, solo formulas, ahora te indico como:
Cuenta cuantos datos quieres desconcatenar, supon que son tres, entonces crea cinco columnas, en la primera pon una formula =HALLAR(TextoBuscado,BuscarEn,PosicionInicial), el resulado de la formula es un numero que te indica en que lugar de la celda esta ese caracter que separa los datos, por ejemplo, imagina que el dato esté en la celda b2, y sea "BD DIAST 250", entonces aplicas la formula siguiente en d2: HALLAR(" ",B2,1), Y EL RESULTADO ES 3, porque el espacio esta en la tercera posición. Con ese dato en D2, pones en E2 una formula IZQUIERDA(B2,D2-1), donde b2 es de donde sacas los datos y d2 es el numero de caracteres, al que debes restarle uno para sacar todos los caracteres que estan antes del espacio. Te sale "BD" Cierto???.

Seguidamente aplicas en F2 una formula similar a la primera, solo que ahora la posicion inicial será la que encontraste primero en d2, en este caso 3, a la que debes sumar 1. La fomula será HALLAR(" ",B2,D2+1) y de nuevo obtienes un numero que en este caso será la posicion donde se encuentra el segundo separador " ".

Luego en G2 usas la formula EXTRAE(B2,D2+1,F2-D2-1) en donde B2 es la celda de donde extraes los datos, D2+1 es la posicion inicial, recuerda que ahí está la posición donde está el primer separador, al que debes adicionar 1 para extraer solo los datos válidos, y el tercer argumento F2-D2-1, es el número de caracteres, y estará definido por la posición del segundo separador menos la posición del primer separador menos 1, para obtener solo datos válidos. En nuestro caso sería 9-3-1, y el resultado es "DIAST", Facil, verdad????

El tercer componente es mas facil, aplicas la formula LARGO(B2) en la celda H2, y obtienes la cantidad de caracteres de la celda, luego escribes en I2 : DERECHA(B2,H2-F2) y obtienes los datos requeridos. Puedes hacer esto cuantos separadores tengas, y es util si quieres por ejemplo separar los apellidos paterno, materno y nombres de una persona. Si tienes algun problema me escribes al correo que aparece y te envio la hoja de cálculo con los datos funcionando. Inténtalo, hacerlo es mas facil que escribirlo....

A B C D E F G H I
1
2 BD DIAST 250 3 BD 9 DIAST 12 250

El problema de los "dos espacios" puedes solucionarlo con una macro que reemplace los dos espacios juntos por uno solo en la celda. BUSCAR Y REEMPLAZAR (CTRL + L) cada vez que encuentre dos espacios, es reemplazado por uno solo y se ejecutaría antes de que apliques las fórmulas.

Si tienes dudas, escribe al correo adjuntando el archivo con los datos a separar y te puedo ayudar

César ----------- [email protected]
Arequipa-Perú

como buscar y luego extraer un dato de una hoja di

Publicado por Marcos (3 intervenciones) el 01/12/2007 00:18:47
necesito extraer undato que se encuentra en una hoja diferente (Supplier)de esta manera

ColumA ColumB
f1 P0001 3M ARGENTINA S.A.C.I.F.I.A.
f2 P0002 AEROFARMA LABORATORIOS S.A.
f3 P0004 AGRO EFAC S.A.
f4 P0005 AKERMAN RUBEN ADOLFO
f5 P0006 AGUADO Y CIA S.A.

para ingresarlo en otra hoja donde solo tengo el dato de la columB

ColumA ColumB
(codigo corresp) 3M ARGENTINA S.A.C.I.F.I.A.
AKERMAN RUBEN ADOLFO
y debo completar con su correspondiente en la colum1
logre estaformula pero a vecez no sirve

=EXTRAE(Supplier!A:A;HALLAR(B3;Supplier!B3:B7376);5)

Por favor ... que me puede estar faltando ¿?

RE:Duda: Cómo desconcatenar un dato.

Publicado por Hugo (1 intervención) el 13/04/2009 20:49:40
Hola, me gustó bastante leer este foro, y me genera una duda respecto a una necesidad, tengo celdas con los siguientes valores:

fm 60x240x0x0 - cc
fma 30x180x30x0
dt 120x30x0x0

con los datos de este foro pude separar los primeros valores, es decir:

fm / 60
fma / 30
dt / 120

pero como puedo separar realmente todos los datos??

fm / 60 / 240 / 0 / 0 / cc
fma / 30 / 180 / 30 / 0
dt / 120 / 30 / 0 / 0

les ruego me puedan ayudar con esto

Gracias

esta se aplica a tochas.

Publicado por carlos velazquez ramirez (1 intervención) el 29/11/2006 20:57:40
lo unico que tienes que hacer es seleccionar la columna que contie los datos, si husas office 97-2003, en el menu datos hay una opcion que es texto en colunmas, ahi tu puedes especificar como lo quieres, por el caso que tu muestras, la opcion es:
seleccionar columna -> datos -> seleccionas delimitados -> veo que estan separadas por espacios, lo puedes seleccionar por tabulador y espacio en los check box, despues, considerar separadores consecutivos como uno solo, -> seleccionas la celda donde incia, antes, has tres columnas a la derecha de donde se encuantran los datos, la casilla que seleccionas sera apartir de donde los datos comenzaran a colocarse, despues presionas finalizar y listo.

funcional para texto, numeros, fechas, etc, ya ven como no era tan complicado

mas dudas, a [email protected]
talento mexicano, talento UNAM...