** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Buscar en otros archivos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoBuscar en otros archivos

 Responder Responder Página  12>
Autor
Mensaje
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Tema: Buscar en otros archivos
    Enviado: 08/Octubre/2019 a las 16:04
Hola Como están?

Solicito su ayuda en lo siguiente:

Tengo una macro con la cual importo alfabeticamente a la celda A1 los nombres de los archivos que tengo un una carpeta. En la celda A2 se agrega el siguiente nombre y así sucesivamente.

La lista que se importa, va a variar a medida que se incluyen nuevas fichas.

Cada archivo es una ficha digital donde se lleva un registro de las actividades de cada alumno.
En ese archivo/ficha hay un rango "Fecha" donde se va anotando las actividades del alumno

Quisiera poder  construir una fórmula, con la cual, en la celda B1 y siguientes, me de la fecha del último evento, basado en el nombre que tengo en la celda A1

Ultimo Evento
Analia.xls 15-ago-19 MAX('D:\Documentos\Fichas Digitales\Analia.xlsx'!Fecha)
Angélica.xls
Anita.xls
Beatriz.xls
Carlos.xls
Carmen.xls
Facundo.xls
Jose.xls
Juan.xls
Julian.xls
Maria.xls
Nicolas.xls
Valentina.xls
Valeria.xls

La siguiente fórmula funciona

=MAX('D:\Documentos\Fichas Digitales\Analia.xlsx'!Fecha)

Me gustaría tener una fórmula de este tipo
=MAX('D:\Documentos\Fichas Digitales\A1'!Fecha)

Gracias por la ayuda

Gladiador


Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 08/Octubre/2019 a las 22:01
Por fórmula solo se me ocurre mediante Indirecto, pero Indirecto no funciona con referencia a libros cerrados.

Prueba a hacerlo con una macro.
Saludos desde Tenerife.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 00:00
Podrias ayudarme con la macro?
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 01:29
Quizás sí, pero es necesario conocer donde y como están tus datos, tanto en origen como en destino.
Saludos desde Tenerife.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 03:52
Gracias AnSanVal.

Los archivos están ubicados en el siguiente directorio
D:\Documentos\Fichas Digitales\

Todos los archivos, tienen una hoja donde se anota la actividad (asistencia) del alumno.
El rango de celdas de la fila donde se anotan las fechas se ha nombrado "Fecha", es por eso que busco el valor mayor de ese rango.

En un archivo aparte, he anotado el nombre de los archivos (fichas digitales) que son nombradas con el nombre y apellido de cada alumno.

Lo que deseo construir es una lista con la última fecha de actividad de cada alumno.

No se que otra información pueda suministrar

Muy agradecido por la colaboración

Gladiador
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 04:11
He construido, esta tabla, a manera de ejemplo de lo que necesito. En el lado derecho he colocado la fórmula que utilicé.

Lo que me gustaría, es que cada vez que actualice los nombres de los archivos, se actualice la fecha de la última actividad que tiene cada archivo


A B C D
1 Nombre Ultimo Evento
2 Analia.xls 15/08/2019 MAX('D:\Documentos\Fichas Digitales\Analia.xls'!Fecha)
4 Angélica.xls 25/09/2019 MAX('D:\Documentos\Fichas Digitales\Angélica.xls'!Fecha)
5 Anita.xls 02/10/2019 MAX('D:\Documentos\Fichas Digitales\Anita.xls'!Fecha)
6 Beatriz.xls 05/10/2019 MAX('D:\Documentos\Fichas Digitales\Beatriz.xls'!Fecha)
7 Carlos.xls 24/09/2019 MAX('D:\Documentos\Fichas Digitales\Carlos.xls'!Fecha)
8 Carmen.xls 10/09/2019 MAX('D:\Documentos\Fichas Digitales\Carmen.xls'!Fecha)
9 Facundo.xls 30/08/2019 MAX('D:\Documentos\Fichas Digitales\Facundo.xls'!Fecha)
10 Jose.xls 03/09/2019 MAX('D:\Documentos\Fichas Digitales\Jose.xls'!Fecha)
11 Juan.xls 07/09/2019 MAX('D:\Documentos\Fichas Digitales\Juan.xls'!Fecha)
12 Julian.xls 01/10/2019 MAX('D:\Documentos\Fichas Digitales\Julian.xls'!Fecha)
13 Maria.xls 18/09/2019 MAX('D:\Documentos\Fichas Digitales\Maria.xls'!Fecha)
14 Nicolas.xls 30/09/2019 MAX('D:\Documentos\Fichas Digitales\Nicolas.xls'!Fecha)
15 Valentina.xls 04/10/2019 MAX('D:\Documentos\Fichas Digitales\Valentina.xls'!Fecha)
16 Valeria.xls 03/10/2019 MAX('D:\Documentos\Fichas Digitales\Valeria.xls'!Fecha)


Lo que me gustaría es que la fórmula tome el nombre del archivo, de la columna "A" que es donde se copió la lista de los archivos
Digamos algo como esto:
B2 = MAX('D:\Documentos\Fichas Digitales\A2!Fecha)
B3 = MAX('D:\Documentos\Fichas Digitales\A3!Fecha)
B4 = MAX('D:\Documentos\Fichas Digitales\A4!Fecha)

Gracias
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 21:11
Vale, lo miro y te cuento (no había podido entrar por aquí).

Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 09/Octubre/2019 a las 21:59

Este ejemplo en realidad abre cada libro, captura la fecha y cierra el libro. Tengo un ejemplo con macro de Excel 4.0 (que no abre los libros), pero no recuerdo donde la tengo.



Sub Act_Fechas()

  Dim ArchivoO As String, wb As Workbook, fila&

 

'Desactiva actualización de pantalla (para evitar parpadeo).

  Application.ScreenUpdating = False

  For fila = 2 To Cells(Rows.Count, 1).End(xlUp).Row

'Ruta del archivo.

    ArchivoO = "D:\Documentos\Fichas Digitales\" & Cells(fila, 1).Value

'Abre el libro fuente. Sólo lectura.

    Set wb = Workbooks.Open(ArchivoO, True, True)

'Escribe la última fecha.

    ThisWorkbook.Worksheets(1).Cells(fila, 2).Value = _

        wb.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Value

'Cierra el libro fuente.

    wb.Close False

  Next fila

'Activa actualización de pantalla.

  Application.ScreenUpdating = True

'Libera el espacio de la variable wb.

  Set wb = Nothing

End Sub



- La macro debe estar en un módulo ordinario del libro (xlsm) que contiene la lista de nombres, y debes ejecutarla siendo la hoja activa la hoja que contiene la lista.

- He hecho pruebas con una lista de 3 nombres (3 libros) y funciona sin problemas.



Saludos desde Tenerife.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 11/Octubre/2019 a las 04:39
Publicado originalmente por AnSanVal AnSanVal escribió:

Este ejemplo en realidad abre cada libro, captura la fecha y cierra el libro. Tengo un ejemplo con macro de Excel 4.0 (que no abre los libros), pero no recuerdo donde la tengo.






Hola AnSanVal, muy agradecido por tu ayuda. Ya lo probé y funcionó. Excelente tu aporte como siempreThumbs Up

No se si pedir el cierre el hilo, pues dices que tienes una macro que no abre los libros. Sería muy bueno si la encuentras, pues creo que haría la operación mas rápida.

De todos modos te estoy muy agradecido

Gladiador
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 12/Octubre/2019 a las 13:37
Gracias también a ti por la retroalimentación.

- Si quieres cerrar la consulta no hay problema. En caso de encontrar la macro E 4.0 te lo haré saber (aunque actualmente no tengo mucho tiempo).


Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 15/Octubre/2019 a las 20:59

Mira como sería con todos los alumnos en un solo libro; siendo fechas = A2:A10000 y nombres = B2:B10000 (o más):


              A             B             C            D                 E 
1 Fecha Nombre      
2 01-may-15 Nombre1   Nombre1 14-may-19
3 02-may-15 Nombre2   Nombre2 12-may-19
4 03-may-15 Nombre3   Nombre3 13-may-19
5 04-may-15 Nombre4   Nombre4 15-may-19
6 05-may-15 Nombre5   Nombre5 16-may-19
7 06-may-15 Nombre1      
8 07-may-15 Nombre2      
9 08-may-15 Nombre3      
10 09-may-15 Nombre4      
11 10-may-15 Nombre5      
12 11-may-15 Nombre1      
4600 12-may-19 Nombre2      
4601 13-may-19 Nombre3      
4602 14-may-19 Nombre1      
4603 15-may-19 Nombre4      
4604 16-may-19 Nombre5      
4605          



[E2]   =INDICE(fechas;SUMAPRODUCTO(MAX((nombres=D2)*(FILA(nombres)-1))))






Editado por AnSanVal - 15/Octubre/2019 a las 21:01
Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 15/Octubre/2019 a las 22:30

Te pongo el enlace a un ejemplo con los datos de origen en una Tabla Excel de nombre BD.


https://1drv.ms/x/s!AiHNLEcByIEjmxnzZK7-QGffr0-M?e=WvCEiC


En el ejemplo supongo que las fechas las tienes ordenadas cronológicamente (más antigua a más reciente).


Saludos desde Tenerife.
Arriba
Gladiador Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 22/Junio/2006
Localización: Venezuela
Estado: Sin conexión
Puntos: 220
Enlace directo a este mensaje Enviado: 15/Octubre/2019 a las 23:49
Hola.  Gracias por tu sugerencia.
Sería ideal tener toda la información de los alumnos en un solo libro. Pero ya hace tiempo que el instituto lo lleva de esa manera.

He desarrollado una solución adicional, pero necesito una pequeña ayuda.
ABC
5Adriana Ma.xlsx=MAX('D:\Documentos\Fichas Digitales\Adriana Ma.xlsx'!Fecha)01-ago-19
6Adriana Me.xlsx=MAX('D:\Documentos\Fichas Digitales\Adriana Me.xlsx'!Fecha)09-oct-19
7Adriana Pe .xlsx=MAX('D:\Documentos\Fichas Digitales\Adriana Pe .xlsx'!Fecha)23-ago-19
8Adriana Za.xlsx=MAX('D:\Documentos\Fichas Digitales\Adriana Za.xlsx'!Fecha)25-sep-19
9Agostina Fe.xlsx=MAX('D:\Documentos\Fichas Digitales\Agostina Fe.xlsx'!Fecha)04-sep-19
10Aldana Pa.xlsx=MAX('D:\Documentos\Fichas Digitales\Aldana Pa.xlsx'!Fecha)11-sep-19
11Alejandra Fi.xlsx=MAX('D:\Documentos\Fichas Digitales\Alejandra Fi.xlsx'!Fecha)=MAX('D:\Documentos\Fichas Digitales\Alejandra Fi.xlsx'!Fecha)
12Alejandro Mo.xlsx=MAX('D:\Documentos\Fichas Digitales\Alejandro Mo.xlsx'!Fecha)=MAX('D:\Documentos\Fichas Digitales\Alejandro Mo.xlsx'!Fecha)
13Alessandra Cu.xlsx=MAX('D:\Documentos\Fichas Digitales\Alessandra Cu.xlsx'!Fecha)=MAX('D:\Documentos\Fichas Digitales\Alessandra Cu.xlsx'!Fecha)
14Ana Iz.xlsx=MAX('D:\Documentos\Fichas Digitales\Ana Iz.xlsx'!Fecha)=MAX('D:\Documentos\Fichas Digitales\Ana Iz.xlsx'!Fecha)

Los datos los he colocado a partir de la fila 5. Por lo tanto en la celda B5 he colocado la siguiente fórmula
=CONCATENAR("=";"MAX('D:\Documentos\Fichas Digitales\";$A5;"'!Fecha)")
Esta fórmula la he copiado hasta el final de la lista

En la celda C5 he realizado un COPIAR y PEGAR-VALORES de la celda B5.

Cuando edito la celda (F2) y pulso "Enter" me aparece la fecha que necesito.

Esto ya me ha pasado antes cuando he descargado datos en Excel (desde mi banco). En la hoja descargada, me aparecen las cantidades como si fuesen texto (a la izquierda de la celda) las cuales al editarla (F2) se colocan a la derecha.

Como podría construir una macro que Edite cada celda de la columna C?

Gracias
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 16/Octubre/2019 a las 19:05
 Ermm

Sub Prueba()
  Dim celda As Range
  For Each celda In Range("C5:C14").Cells
    celda = celda.Value
  Next celda
End Sub



Saludos desde Tenerife.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 16/Octubre/2019 a las 20:09

Como mi ejemplo anterior no conserva las fórmulas  (en realidad no edita), prueba con esta otra, que coloca la fórmula directamente en , mostrando la fecha.


Sub Formulas()

  Dim celda As Range, celda1$, fila&

  celda1 = ActiveCell.Address

  Application.ScreenUpdating = False

  For fila = 5 To Cells(Rows.Count, 1).End(xlUp).Row

    Cells(fila, 2).Formula = "=MAX('D:\Documentos\Fichas Digitales\" & Cells(fila, 1).Value & "'!Fecha)"

  Next fila

  Range(celda1).Select

  Application.ScreenUpdating = True

End Sub



Probé con 300 nombres  (10 nombres repetidos hasta  fila 309) y tarda 1 segundo.


Ya  contarás como te va en el caso real.  



Saludos desde Tenerife.
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable