6 febrero, 2025

LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS

Hola a todos!

Hoy os traigo un post que ha surgido fruto de una consulta que me envía un lector, dice así:

«Buen dia , te consulto si con el objeto file puedo listar las palabras de cada archivo? gracias»

Esta consulta viene relacionada con el siguiente post: LISTAR LAS PROPIEDADES DE TODOS LOS ARCHIVOS DE UNA CARPETA Y SUBCARPETAS donde lo que hacía el código era lista todos los archivos contenidos en carpetas y subcarpetas y además obtener las diferentes propiedades de cada uno de ellos.

Pues bien, el lector me pregunta si es posible listar todas las palabras de cada uno de los archivos. Antes de seguir adelante, tengo que comentar que en un principio me entraron algunas dudas sobre la utilidad de realizar dicha tarea y sus implicaciones, sobre todo por el (potencial) gran volumen de información que se podría generar en cada consulta, (tantas filas como palabra contengan los archivos seleccionados). Pero siguiendo con la filosofía de esta web: «Si lo imaginas, lo puedes crear» decidí realizar la macro.

Veamos para comenzar a trabajar es necesario crear una serie de archivos que sean sobre los que vamos a extraer todas las palabras que contengan.

Imaginar dos archivos, con tres pestañas cada uno y con información en cada una, por ejemplo, en la primera tenemos estos datos:

LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS

Y así en el resto de los archivos:

[wpvideo 4rc11lgd]

Lo que vamos a pretender es listar todas esas palabras en una única columna desde nuestro archivo.

Para realizar este trabajo, utilizaremos la siguiente macro:

Option Explicit
Sub LISTAR_PALABRAS()
'Declaramos variables
Dim i As Integer, j As Integer, dir_Archivo As Variant
Dim Archivo_n As Workbook, elimina As Integer, nHoja As Integer
Dim target As Variant, celda As Variant, Dat As Variant, n As Integer
Application.ScreenUpdating = False
'Creamos ventana de diálogo para seleccionar los archivos que queremos agrupar
dir_Archivo = Application.GetOpenFilename(Title:="SELECCIONA ARCHIVOS PARA CONSOLIDAR", MultiSelect:=True, filefilter:="Excel files (*.xls*), *.xls*")
'Si no seleccionamos archivos, salimos del proceso
If Not IsArray(dir_Archivo) Then
Exit Sub
End If
'Si existen datos en la hoja AGRUPADO, los eliminamos
With ThisWorkbook.Sheets("Hoja1")
elimina = Application.CountA(.Range("A:A")) + 1
If elimina > 0 Then .Range("A1:A" & elimina).Clear
'Iniciamos un for con para identificar los archivos seleccionados
If IsArray(dir_Archivo) Then
For j = LBound(dir_Archivo) To UBound(dir_Archivo)
'obtenemos ruta al archivo seleccionado
Set Archivo_n = Workbooks.Open(Filename:=dir_Archivo(j))
'contamos las hojas del archivo seleccionado
nHoja = ActiveWorkbook.Worksheets.Count
'Iniciamiamos bucle.
For i = 1 To nHoja
'seleccionamos hasta la última fila con datos
Sheets(i).Select
With Sheets(i)
Range(.Cells(1, 1), ActiveCell.SpecialCells(xlLastCell)).Select
target = Selection
End With
'Por cada celda con datos en la selección
For Each celda In target
If celda <> "" Then
'Analizamos contenido y separamos por espacio cada palabra
For Each Dat In Split(celda, " ")
n = Application.CountA(.Range("A:A")) + 1
'Lo colocamos en la hoja de nuestro archivo
.Cells(n, 1) = Dat
Next Dat
End If
Next celda
Next i
'cerramos archivo seleccionado
Archivo_n.Close False
Next j
End If
End With
End Sub

Este código permite seleccionar directamente los archivos que necesitamos, sin necesidad de seleccionar la carpeta (se podría modificar para que lo hiciese en carpetas y subcarpetas).

El resultado de la macro sería el siguiente:

Primero os vuelvo a dejar el contenido de la primera hoja:

LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS

Y el resultado:

LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS_1

Hasta la línea 26 se corresponde con la primera hoja del primer archivo, lo que sigue es la segunda hoja (en la que ya no dejé encabezados).

Como podéis comprobar, la macro identifica cada palabra como aquel elemento separado por un espacio en blanco.

La macro no es compleja, simplemente incluimos los archivos seleccionados en un array y luego recorremos cada uno de ellos y sus hojas, seleccionando el rango con datos y detectando las palabras contenidas en cada celda para luego pasarlas a nuestra hoja.

Comentar que los datos se pasan a la columna A de nuestro archivo. Como siempre lo subo como .xls (lo que implica un límite de filas de 65.536), para tener mayor espacio solo tenéis que guardar el archivo como .xlsm o también programar parte de la macro que al llegar a determinado número de fila, comience a lista en la columna B y así sucesivamente (esto os lo dejo como tarea)

Y eso es todo, espero que os haya resultado de interés y en algún momento os sirva de utilidad la macro.

Descarga el archivo de ejemplo pulsando en: LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS

Archivos de prueba: EJEMPLO_1 EJEMPLO_2

 

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

3 comentarios en «LISTAR TODAS LAS PALABRAS CONTENIDAS EN UNO O VARIOS ARCHIVOS»

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies