Hojas de cálculo en Excel - página principal

Importar datos concretos de un fichero de texto

A raíz el artículo en el que explicaba como leer un fichero de texto desde excel, un lector del blog, me preguntó como podía automatizar la tarea de leer solo una parte en concreto, de un fichero de texto. Como su pregunta no me quedaba clara, le dije que me mandara el fichero y que me dijera qué es lo que quería leer concretamente, y vería si era capaz de resolver su duda.

Cuando abrí el fichero, y leí lo que quería hacer, vi rápidamente la utilidad de escribir este artículo. Y en eso estamos. Para que entendáis la idea, imaginad un fichero de texto plano, generado por un software cualquiera, que tiene X líneas, pero de las cuales, nos interesa obtener solo unas cuantas, y además, de esas cuantas líneas, solo nos interesa una parte del texto comprendido en ellas. ¿Un poco lioso, verdad?. Bueno, vamos a verlo con el mismo ejemplo que me pasó el amigo Victor Fajardo, pues me ha autorizado a hacerlo público.

Imaginad que tenemos un fichero de texto como este (pantallazo de un fragmento del fichero), que contiene información topográfica:



Ahora la cuestión radica en poder obtener una serie de datos que hay en el fichero de texto. En concreto aquellos valores que indican el punto geodésico, la latitud sur, la longitud oeste, la altura elipsoidal, la coordenada norte, la coordenada este, la altura ortométrica, y el factor de escala de proyección.

Quizás te preguntes ¿y dónde está todo eso?. Pues esa misma pregunta me la hice yo, pero el amigo Fajardo, ya me la resolvía antes de planteársela. Me dijo que esos datos figuraban en el fichero de texto, y eran los que aparecían coloreados en la siguiente imagen:



Perfecto, ya iba entendiendo lo que quería hacer. Quería obtener una serie de datos que se repetían cada X líneas, para pasarlos a un fichero de excel, sin tener que hace un copiar y pegar, o sin tener que escribirlos a mano, mientras los leía en el fichero de texto. Vamos, que quería obtener una tabla de excel como esta:



Fantástico. Ya tenemos todos los datos necesarios para empezar a plantear el problema. Tenemos el fichero de texto, sabemos qué datos queremos obtener, y sabemos como queremos presentarlos. Lo único que nos queda es resolver el problema.

Cuando se nos presenta un problema de este tipo, lo primero que tenemos que hacer es pensar si el fichero de texto sigue un patrón de comportamiento común. Si lo tiene, nuestro problema se resuelve de una forma más sencilla.

Veamos si existe ese patrón de comportamiento. Lo primero que observamos, es que el fichero de texto tiene una cabecera donde nos aparece lo que puede ser el software que lo ha generado (haced doble clic en la primera imagen que aparece en este artículo, para poder ampliar la imagen del fichero de texto), y algunas líneas más de carácter general. Luego, un poco más abajo, vemos que hay una serie de bloques de texto, que contienen datos homogéneos. En concreto hay 8 líneas de texto, luego 1 línea en blanco, luego otras 8 líneas de texto, y así sucesivamente, hasta llegar al final del fichero.

Para poder obtener los datos relativos al punto geodésico, a la latitud sur, a la longitud oeste, a la altura elipsoidal, a la coordenada norte, a la coordenada este, a la altura ortométrica, y el factor de escala de proyección, podemos utilizar varias técnicas. Por ejemplo, para obtener la Longitud Oeste (el dato que hay detrás del texto "Lon: W"), a bote pronto, se me ocurre que lo más sencillo va a ser hacer lo siguiente, pues existe un patrón de comportamiento idéntico en los datos del fichero:

1.- Buscaremos en todas las líneas, aquellas que contengan el texto "Lon: W".

2.- Una vez hayamos encontrado ese texto, nos quedaremos con los siguientes 21 caracteres, pues a partir de ese carácter ya obtenemos otro dato diferente a la longitud oeste.

3.- Como además el amigo Victor Fajardo quería añadir los grados, minutos y segundos, deberemos descomponer esos 21 caracteres, en tres grupos. Caca uno de ellos estará separado por un espacio vacío, y contendrá un bloque de números. El primer grupo serán los que representaremos con grados, el segundo con los minutos, y el tercero con los segundos.

Pues bien, eso nos sirve para obtener el dato correspondiente a la longitud oeste, pero ¿y el resto de los datos?. Pues exactamente igual. Para el resto de datos que queramos importar, haremos exactamente lo mismo, pero seleccionando aquellos caracteres que nos definan las variables a importar. En lugar de "Lon: W", serán " hgt:", "n:", etc.

Para el caso concreto del primer dato que queremos obtener, es decir, el punto geodésico, como no hay ningún texto a partir del cual sepamos que lo que hay detrás es lo que nos sirve, yo he optado por hacer lo siguiente:

1.- Hemos buscado la palabra "(meters)", que está en la 2ª línea de esos bloques de los que hablábamos antes, y que estaban formados por 8 líneas de texto.

2.- Hemos retrocedido una línea, para pasar a la línea 1 (recordemos que "(meters)" está en la segunda línea).

3.- Nos hemos quedado con los 19 primeros caracteres de esa primera línea.

Como veis, solo es cuestión de buscar el patrón de comportamiento del fichero de texto, para a partir de él, obtener cada uno de los datos que necesitamos.

Y no hay más secreto... Bueno sí. Para ahorrarnos dolores de cabeza, lo primero que hemos hecho, ha sido importar todo el fichero de texto, en una zona de la hoja de cálculo que no nos moleste, y luego a partir de esos datos, es con los que hemos trabajado (el fichero de texto, una vez importado todo él, lo cerramos). Una vez tengamos todo listo, y bien bonito en nuestra hoja de cálculo, borraremos todos esos datos que nos han servido de borrador (todos los datos importados a lo bruto y que hemos escrito en una zona de la hoja de cálculo en la que no estorbe).

El código que nos permite importar todos esos datos, será este:


Sub leer_fichero_de_texto()
On Error Resume Next
'Ocultamos el procedimiento
Application.ScreenUpdating = False
'eliminamos todo lo que haya escrito desde A6 hasta abajo
Range("A6").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Delete
'informamos del nombre del fichero de texto
fichero_de_texto = "datos.txt"
'Creamos el objeto FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
'Abrimos el fichero. Si el fichero de texto no está
'en la misma ruta que el fichero de excel donde tenemos
'este macro, deberemos poner la ruta de esta forma:
'Set archivo = fso.OpenTextFile("E:\excel\" & fichero_de_texto, 1)
'Como supondremos que tenemos el fichero de texto
'en la misma ruta, pondremos esto otro:

ruta = ActiveWorkbook.Path
Set archivo = fso.OpenTextFile(ruta & "\" & fichero_de_texto, 1)
'Cargamos en una variable todas las líneas
contenido = archivo.readall
'Cerramos el fichero
archivo.Close
'Limpiamos los objetos
Set fso = Nothing
Set archivo = Nothing
'creamos un array con los datos,
'y los separamos por los intros que haya
'en el fichero de texto (cada "intro" es
'una línea nueva). Tecla intro = vbCrLf

contenido = Split(contenido, vbCrLf)
'empezamos a escribir en la celda I6
Range("I6").Select
'Para todos los elementos del vector...
For i = 0 To UBound(contenido)
'Vamos escribiendo línea a línea
ActiveCell = contenido(i)
'Pasamos a la siguiente línea
ActiveCell.Offset(1, 0).Select
Next 'seguimos con el bucle
'fichamos la celda hasta la que hemos llegado
'para extraer la fila deonde estamos

fila_final = ActiveCell.Row
'Nos situamos en la columna I, a partir de I6
Range("I6").Select
'Ahora vamos a coger los datos que nos interesan,
'para todo el rango de filas que van desde la
'fila 1, hasta la fila_final

For i = 1 To fila_final
'fichamos la celda donde estamos, para volver a ella
celda = ActiveCell.Address
'******************************************
' PUNTO GEODÉSICO
'******************************************
'si la fila contiene la palabra " (meters) ", fichamos la fila de arriba
'que es la que contiene el punto geodésico

If InStr(LCase(ActiveCell), " (meters) ") > 1 Then
'cogemos los 19 primeros caracteres, pues a partir
'del 20, ya aparece la fecha y la hora

punto_geodesico = Left(ActiveCell.Offset(-1, 0), 19)
'Escribimos los datos a partir de A6
Range("A6").Select
'Escribimos el título
ActiveCell = "PUNTO GEODÉSICO"
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = punto_geodesico
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' LATITUD SUR
'******************************************
'si la fila contiene la palabra " Lat: S ", fichamos la fila
'que contiene la latitud sur

If InStr(LCase(ActiveCell), " lat: s ") > 1 Then
'cogemos desde el caracter 35, hasta el 56,
'es decir, 21 caracteres más, a partir del 35,
'con "trim" quitaremos los espacios vacíos de delante y detrás

lati_sur = Trim(Mid(ActiveCell, 35, 21))
'descomponemos el valor en los tres elementos,
'con el delimitador de espacio " "

latitud_sur = Split(lati_sur, " ")
'añadimos los grados, minutos y segundos, a cada elemento (el 0, el 1, y el 2)
'pues los elemenos del vector, empiezan por 0
latitud_sur = latitud_sur(0) & "º" & latitud_sur(1) & "'" & latitud_sur(2) & """"
'Escribimos los datos a partir de B6
Range("B6").Select
'Escribimos el título
ActiveCell = "LATITUD SUR"
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = latitud_sur
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' LONGITUD OESTE
'******************************************
'si la fila contiene la palabra " Lon: W ", fichamos la fila
'que contiene la longitud oeste

If InStr(LCase(ActiveCell), " lon: w ") > 1 Then
'cogemos desde el caracter 35, hasta el 56,
'es decir, 21 caracteres más, a partir del 35,
'con "trim" quitaremos los espacios vacíos de delante y detrás

long_oeste = Trim(Mid(ActiveCell, 35, 21))
'descomponemos el valor en los tres elementos,
'con el delimitador de espacio " "

longitud_oeste = Split(long_oeste, " ")
'añadimos los grados, minutos y segundos, a cada elemento (el 0, el 1, y el 2)
'pues los elemenos del vector, empiezan por 0
longitud_oeste = longitud_oeste(0) & "º" & longitud_oeste(1) & "'" & longitud_oeste(2) & """"
'Escribimos los datos a partir de C6
Range("C6").Select
'Escribimos el título
ActiveCell = "LONGITUD OESTE"
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = longitud_oeste
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' ALTURA ELIPSOIDAL
'******************************************
'si la fila contiene la palabra " Hgt: ", fichamos la fila
'que contiene la altura elipsoidal

If InStr(LCase(ActiveCell), " hgt: ") > 1 Then
'cogemos desde el caracter 35, hasta el 56,
'es decir, 21 caracteres más, a partir del 35,
'con "trim" quitaremos los espacios vacíos de delante y detrás

altura_elipsoidal = Trim(Mid(ActiveCell, 35, 21))
'Escribimos los datos a partir de D6
Range("D6").Select
'Escribimos el título
ActiveCell = "ALTURA ELIPS."
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = altura_elipsoidal
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' COORDENADA NORTE
'******************************************
'si la fila contiene la palabra " N: ", fichamos la fila
'que contiene la coordenada norte

If InStr(LCase(ActiveCell), " n: ") > 1 Then
'cogemos desde el caracter 58, hasta el 71,
'es decir, 13 caracteres más, a partir del 58,
'con "trim" quitaremos los espacios vacíos de delante y detrás

coordenada_norte = Trim(Mid(ActiveCell, 58, 13))
'Escribimos los datos a partir de E6
Range("E6").Select
'Escribimos el título
ActiveCell = "COORD. NORTE"
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = coordenada_norte
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' COORDENADA ESTE
'******************************************
'si la fila contiene la palabra " E: ", fichamos la fila
'que contiene la coordenada este

If InStr(LCase(ActiveCell), " e: ") > 1 Then
'cogemos desde el caracter 58, hasta el 71,
'es decir, 13 caracteres más, a partir del 58,
'con "trim" quitaremos los espacios vacíos de delante y detrás

coordenada_este = Trim(Mid(ActiveCell, 58, 13))
'Escribimos los datos a partir de F6
Range("F6").Select
'Escribimos el título
ActiveCell = "COORD. ESTE"
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = coordenada_este
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' ALTURA ORTOMÉTRICA
'******************************************
'si la fila contiene la palabra " Orth: ", fichamos la fila
'que contiene la altura ortométrica

If InStr(LCase(ActiveCell), " orth: ") > 1 Then
'cogemos desde el caracter 61, hasta el 71,
'es decir, 10 caracteres más, a partir del 61,
'con "trim" quitaremos los espacios vacíos de delante y detrás

altura_ortometrica = Trim(Mid(ActiveCell, 61, 10))
'Escribimos los datos a partir de G6
Range("G6").Select
'Escribimos el título
ActiveCell = "ALTURA ORTO."
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = altura_ortometrica
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
' FACTOR DE ESCALA DE PROYECCIÓN
'******************************************
'si la fila contiene la palabra " Grid Scale: ", fichamos la fila
'que contiene el factor de escala de proyección

If InStr(LCase(ActiveCell), " grid scale: ") > 1 Then
'cogemos desde el caracter 67, hasta el 79,
'es decir, 12 caracteres más, a partir del 79,
'con "trim" quitaremos los espacios
'vacíos de delante y detrás

factor_escala = Trim(Mid(ActiveCell, 67, 12))
'Escribimos los datos a partir de H6
Range("H6").Select
'Escribimos el título
ActiveCell = "FACTOR ESCALA PROY."
'lo ponemos en negrita, subrayado, y en rojo
With Selection
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle
.Font.ColorIndex = 3
End With
'buscamos la primera celda vacía
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
'y escribimos el dato x
ActiveCell = factor_escala
End If
'volvemos donde estábamos
Range(celda).Select
'******************************************
'ahora bajamos una fila

ActiveCell.Offset(1, 0).Select
Next 'continuamos con el bucle
'finalmente eliminamos los datos que
'habíamos escrito en la columna I

Columns("I:I").Select
Selection.Delete Shift:=xlToLeft
'nos situamos en A6
Range("A6").Select
'Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub


Quizás ese código puede que os parezca un poco largo, pero en realidad, como estamos usando la misma técnica para importar la latitud sur, la longitud oeste, la altura elipsoidal, etc., pues nos bastará con copiar y pegar determinadas partes del código, para retocarla posteriormente.

Una vez ejecutemos ese macro (con el fichero de texto llamado "datos.txt", y en la misma carpeta que el fichero de excel), obtendremos esto:



Con este macro, lo que conseguimos es que cada vez que tengamos que trabajar con el fichero de tiempo, no perdamos horas (da igual lo largo que sea el fichero de texto), haciendo un copiar y pegar, o bien transcribiendo a mano los datos del fichero de texto, directamente en excel. Ahora con tan solo pulsar un botón en la hoja de cálculo, obtendremos los datos deseados del fichero de texto.

Si deseáis ver esto con vuestros propios ojos, desde aquí podéis descargar un fichero comprimido que contiene tanto la hoja de cálculo, como el fichero de texto que he utilizado en este artículo.



35 comentarios:

hfajardo dijo...

Javier:
Excelente solución, gracias por apoyarme con las respuestas a mis dudas, el artículo didacticamente muy bien explicado y felicitaciones por la metodología.

Gracias....

Javier Marco dijo...

Gracias por tu comentario. Estoy seguro que se podía haber explicado mucho mejor, ...ayer estaba un poco espeso :-)

diego dijo...

Javier:
Como hago para tomar parte de un texto
Gracias

Anónimo dijo...

Tu blog es genial, Felicidades y gracias por compartir tus conocimientos. Volviendo al tema del texto: puedes delimitar las celdas por numero de caracteres para que sigan un patrón a la hora de pegar en otras aplicaciones, como si de campos de la misma se tratara?

Javier Marco dijo...

No entiendo muy bien tu pregunta, pero intuyo que quieres limitar el nº de caracteres que recibes de una celda, ¿no?.

Mira este ejemplo, donde limitamos el nº de caracteres a 10:

Sub prueba()
Var = "Excel es una aplicación de Microsoft"
MsgBox (Left(Var, 10))
End Sub

Anónimo dijo...

Gracias por tu respuesta. Pero, podría rellanar con, por ejemplo Ceros, hasta rellenar un campo hasta su límite. Por ejemplo:
Campo numérico de 10 posiciones.
Valor: 250
Podría poner 0000000250 ?

Muchas gracias por tu ayuda.

Javier Marco dijo...

Una forma rápida de hacer eso, es situándote encima de esas celdas con números, y desde el menú "Formato", selecciona "Celdas", y a continuación dentro de la categoría "Personalizada", escribe diez ceros seguidos.

Creo que es la mejor forma, porque además podrás operar con ellos (sumar, restar, etc.), aunque visualmente te aparezcan ceros a la izquierda. Cosa que de otra forma (por ejemplo, con un macro), te lo trataría como una cadena de caracteres (como un texto).

Saludos.

diego dijo...

Hola Javier, Podrías decirme como hago para tomar solo una parte de un texto, pues el resto son varialbles. En el ejmplo de esta página, tu usabas una palabra (delimitada por espacios) como referencia, pero en mi caso esa palabra aparece junto con otros caracteres alfanumericos variables y la macro no corre.
Gracias

Javier Marco dijo...

Cuelga un pantallazo de ese fichero en cualquier sitio para subir imágenes, y si me dices que deseas recuperar, te puedo guiar (si sé hacerlo, claro).

Anónimo dijo...

Tengo un pequeño problema al copiar las fechas. En el fichero Texto tengo fechas con este formato
03/01/2009 11:42:26
04/01/2009 08:21:41 y cuando las copio en su celda me intercambia el mes y el año
01/03/2009 y 04/01/2009. Entonces al sacar el mes de esas fechas me saca marzo y abril en vez de enero. Para las fechas por ejemplo
15/12/2008 me lo hace bien.
Me podeis dar alguna pista

Javier Marco dijo...

Sitúate en esa celda, y mira a ver si desde Formato ---> Celdas ---> Pestaña Números ---> Categoría Presonalizada, aparace esto:

dd/mm/aaaa h:mm

o esto:

mm/dd/aaaa h:mm

Debería aparecer lo primero.

Anónimo dijo...

Muchas gracias por la rapidez, pero eso ya lo he comprobado. Pone dd/mm/aaaa h:mm. E incluso antes de asignarle la fecha, como lo hago con una macro le indico el formato, pero le da igual. Y mas raro aun es que, las fechas que me inserta bien, me las alinea a la izquierda y las que inserta mal, las alinea a la derecha de la celda.

jose dijo...

Hola pdria hacer lo mismo que un .txt. Con un .doc.Porque llevo intentando hacer una macro para pasar datos de un word a mi hoja ecel. Y no puedo. GRacias

boofunky dijo...

Gracias, tu blog sirve de gran ayuda.

Cristian Cáceres Ferrada dijo...

hola: gracias por el block, esta increible,, lo que si me surge una duda, tengo un txt con datos de coordenadas 34.83838383; 73.335353, pero el txt q manejo no me sale el nombre lat:34,83; LOG:73.242424, como puedo ir a buscarlo

saludos

Anónimo dijo...

A la inversa tambien se podría hacer pasar uno de excel a txt, con un formato predefinido para que lo lea una aplicación.

Gracias

Javier Marco dijo...

Efetivamente. Aquí tienes un ejemplo de como hacerlo: grabar datos en un fichero de texto.

Anónimo dijo...

Que rapidez, y como puedo hacer para ocultar filas si anteriores no estan completadas, es decir ocultar con condición.
Es bueno advertir que no estoy usando formularios si no que directamente con celdas.

Un saludo

Feliz Navidad.

Javier Marco dijo...

Mírate este artículo: Ocultar filas y columnas, mediante macros.

Simplemente tendrás que incluir un condicional dentro (if ... then), para evaluar si la celda de la fila anterior a aquella en la que estés situado (usa para ello un Offset(-1,0).select) está vacía o no. Algo como esto podría ayudarte:

if Activecell.Offset(-1,0).select = "" then
'entonces ocultamos la fila
else
'no la ocultamos
end if

rnicol69x dijo...

con la mayor sinceridad gracias por sus aportes, son excelentes, me gustaria me ayudara a extraer deeste archivo de texto las columnas A sumnaria, columna B la misma Sumaria pero concatedana con el numero 900 delante de cada sumaria y en la colunma C el nombre del cliente, gracias mi correo es unesruben@hotmail.com soy ruben

rnicol69x dijo...

me gustaria saber si le puedo enviar el archivo txt para que entienda mi requerimiento, gracias

hector dijo...

javier marco te quiero felicitar por la macro que presentas aqui y ademas pues ver si me puedes ayudar tengo un caso similar y trate de hacerlo siguiendo la logica pero no pude, de antemano gracias

Anónimo dijo...

excelente blog, esto es justo lo que andaba buscando, voy a tratar de aplicarlo a mi problema, espero que puedas ayudarme ante cualquier duda, gracias

Leonardo Parada Artiles dijo...

Hola.Enhorabuena por esta formidable página.

Mi consulta es como puedo abrir correctamente en excel una cadena de texto del tipo:
nombre apellido apellido , nombre apellido apellido ,.......

para que en una columna aparezca nombre y apellidos juntos y en la otra el email.

Gracias

Leonardo Parada Artiles dijo...

Hola de nuevo. No se por que no salío el texto tal como lo escribí, espero ahora salga correctamente.

Me refería a una cadena tipo:
nombre apellido apellido , nombre apellido apellido , y asi sucesivamente....

para que en una columna aparezca nombre y apellidos juntos y en la otra el email.

Gracias de nuevo

Leonardo Parada Artiles dijo...

sigue sin salir correctamente.
bueno... la cadena de texto va: nombre apellido apellido , nombre apellido apellido , etcetera etcetera

Espero se me entienda ahora.
Gracias

Leonardo Parada Artiles dijo...

Ultimo intento:
nombre apellido apellido direccion de correo entre signos menor que y mayor que, nombre apellido apellido direccion de correo entre signos menor que y mayor que, ......

Gracias

María Alejandra Mejías Rincón dijo...

HOLA QUISIERA QUE POR FAVOR ME GUIARAS EN ALGO. TENGO UNA FICHA ESTILO FORMULARIO EN EXCEL EN EL CUAL EL FORMATO PERMANECE FIJO Y SE VAN CREANDO TANTOS LIBROS COMO INFORMACIÓN SE NECESITE. PERO HAY UN DETALLE, NECESITO CREAR UNA BASE DE DATOS CON TODA LA INFORMACIÓN QUE TIENE CADA LIBRO Y SIN BASTANTES HOJAS. COMO PODRÍA HACERLO??
TE PODRÍA ENVIAR EL FORMATO PARA QUE LO CHEQUEES Y POR FAVOR ACLARES MIS DUDAS...

andres dijo...

UNA DUDA EN EL CASO QUE EN EL REPORTE QUE MUESTRAS TANTO LOS VALORES DE X Y Z NO EMPIEZAN AL COMIENZO DE LA LINEA, COMO SE MODIFICARIA EL CODIGO SI EMPEZARAN AL COMIENZO PORQUE HE TRATADO DE MODIFICARLO CON EL CODIGO QUE HAS PUESTO PERO NO RESULTA

Gusmario dijo...

hola muy buen foro...

podrias poner un ejemplo de esto que hablan, yo tengo varios libros tambien con informacion del trabajo pero requiero unificar estos libros y generar un reporte, pero siempre termino copiando la informacion de todos los libros y filtrando para organizar el reporte, aclaro que siempre uso el mismo formato, osea siempre esta la informacion organizada en los libros de la misma forma...

Anónimo dijo...

Hola
porfavor si me pueden ayudar con un macro que sea un combobox que al escoger una opcion jale de todas las hojas del libro que tengan ese item

Anónimo dijo...

Hola primero que nada permiteme felicitarte por este excelente block, quisiera saber si se podria hacer lo mismo con un .doc, es decir pasar datos especificos de un documento en word a una hoja en excel. Gracias

Anónimo dijo...

Muchas gracias por tu ayuda, este programa me es muy útil para el que estoy desarrollando... pero tengo un problema. Yo trato con archivos de elementos finitos, es decir textos de 10Mb o lo que es lo mismo un montón de líneas y no me caben en una hoja de excell. Podrías decirme como hacerlo pero de linea en linea. Es decir sin cargar todo el archivo.

Muchas gracias por tu ayuda un saludo

Javier Marco dijo...

Mírate este artículo, que quizás sea lo que buscas: leer un fichero de texto plano.

Saludos.

Manuel CM dijo...

Gracias Javier por compartir tu tiempo y tus conocimientos. Tengo un problema que no se como resolver. Tengo una hoja de excel que por codigo genera una serie de archivos en formato .txt. Hasta ahí todo bien, el problema me surge porque estos archivos están codificados en ANSI y yo necesito que estén en UTF-8 sin BOM. Se que se pueden transformar fácilmente de una codificación a otra con diversos programas pero eso exige hacerlo de uno en uno y son muchos los archivos que se generan diariamente. La pregunta es ¿Hay alguna manera de conseguir que estos archivos se generen directamente en UTF-8 sin BOM?

Gracias por anticipado.