En esta web existen gran cantidad de ejemplos de cómo podemos importar o descargar información desde Internet utilizando macros. Sin duda es una tarea muy interesante que nos ofrece muchas posibilidades, ya sea de mayor información, facilidad y fiabilidad de datos, etc.
Aunque casi la totalidad de ejemplos usa ADO (aunque con diferentes códigos) hoy quiero proponer otra forma de hacerlo con un método diferente, este es, mediante una consulta web )en lugar de ADO o ODBC). Sobre este tema os dejo aquí material técnico: Método QueryTables
Este método también se puede realizar utilizando la cinta de opciones de Excel, entrando en «Datos» pulsando en «Nueva Consulta» y «Desde otras fuentes» en «Desde una web», aquí:
Pero hoy vamos a realizar este trabajo mediante VBA, que nos ofrece mayor versatilidad y desarrollo en nuestra hoja Excel.
Vamos a realizar una pequeña consulta para ilustrar el ejercicio. Uno de los datos que con más frecuencia se suelen importar de Internet son datos bursátiles, por ejemplo los que nos ofrece Yahoo Finance, y en concreto, esta tabla con las empresas del Ibex35 y sus valores en bolsa: Yahoo Finance. Ibex35:
Para poder importar esta tabla a nuestra hoja Excel necesitamos una macro que sea capaz de crear una conexión, descargar los datos y actualizarlos cada cierto tiempo, esto implica por lo tanto que también tendremos que eliminar la conexión anterior y crear una nueva para actualizarla.
Esto lo vamos a hacer utilizando este código:
Sub Actualizar_datos()
'Ejecutamos a la macro Elimina_Datos para eliminar la conexión, la querytable y los datos
Call Elimina_Datos
'Creamos nueva conexión con la web que contiene la tabla o datos que necesitamos
With Sheets("COTIZACIONES").QueryTables.Add(Connection:="URL;https://es.finance.yahoo.com/q/cp?s=%5EIBEX", Destination:=Range("$A$1"))
'indicamos el nombre de la querytable, debemos acabarla con _1 de lo contrario, el sistema otorgará un valor numérico
.Name = "INDICES_BURSATILES_1"
'ajustamos las columnas
.AdjustColumnWidth = True
'actualizamos los datos cada hora
.RefreshPeriod = 60
'descargamos los datos de la tabla 9
.WebTables = "9"
'actualizamos datos en segundo plano
.Refresh BackgroundQuery:=False
End With
End Sub
Sub Elimina_Datos()
Application.ScreenUpdating = False
Dim cnn As Object
'eliminamos las conexión que hemos creado
For Each cnn In ThisWorkbook.Connections
If ActiveWorkbook.Connections.Count > 0 Then cnn.Delete
Next cnn
With Sheets("COTIZACIONES")
filas = Application.CountA(.Range("A:A"))
columnas = Application.CountA(.Range("1:1"))
'eliminamos todos los contenidos de la tabla
'Eliminamos la tabla
If filas And columnas > 0 Then
.Range(Cells(1, 1), Cells(filas, columnas)).Select
Selection.ClearContents
Selection.QueryTable.Delete
.Range("A1").Select
End If
End With
Application.ScreenUpdating = True
End Sub
Como podéis observar, en realidad son dos macros, la primera crea la conexión y descarga los datos (Actualizar_datos) y la segunda elimina la conexión, los datos y la tabla de consultas (Elimina_Datos).
Al ejecutar la primera macro, mediante una instrucción Call llamamos a la segunda macro que limpiará los contenidos cada vez que ejecutemos la consulta.
Otro detalle importante es que una vez ejecutada la macro, podemos especificar el tiempo en el que los datos se actualicen, en este ejemplo es 1 minuto.
Siempre debemos dar un nombre a la conexión, de esta forma podremos detectarla para eliminarla sin tener que borrar todas la conexiones del libro.
El resultado de aplicar esta macro es el siguiente:
Y eso es todo, espero que este ejemplo os haya sido de utilidad. Como siempre os dejo el archivo de ejemplo para que lo podáis consultar. En el archivo de descarga he borrado los datos y la conexión, de forma que debéis pulsar el botón para descargar los datos.
* El código ha sido probado correctamente en Excel 2010, 2013 y 2016.
Descarga el archivo de ejemplo pulsando en: DESCARGAR DATOS UTILIZANDO UNA CONSULTA WEB
*Es posible que el archivo de ejemplo no funcione correctamente, dado que últimamente Yahoo está realizando cambios en su web (tanto en el formato como en el código). Y seguramente ya no empleen la misma denominación para la tabla. En caso de que no funcione, podéis probar en este otro sitio web www.finanzas.com/ibex-35/ y utilizando la tabla «8» (solo tenéis que cambiar el código).
Saludos 🙂
No me funciona: Da «Error de compilación: No se encontró método o datos»
Uso Excel v.15.41 en Mac.
Hola Ángel:
El código está programado para versiones en Windows, no para Mac. Intenta usarlo en Windows, en Excel Signum no programo en VAN para Mac.
Si te sigue dando error en Windows pasame la url de donde quieres bajar la información y cuando pasen estos días de vacaciones te ayudo a programarlo.
Saludos
Funciona pero me pasa lo mismo que la consulta web de excel hay datos que por el formato que tienen en la web no los copia. ¿Sabes de alguna manera para copiar estos datos?
Hola David:
La macro hace lo mismo que una consulta web… para obtener otro tipo de información sería necesario utilizar otro tipo de macro. ¿Qué información deseas obtener?.
Saludos.
SI FUNCIONA, HE LOGRADO EXTRAER DATOS
,LA CONSULTA ES SIEN LA WEB HAY UNA CASILLA QUE SEINGRESA COMO ID,PARA EXTRAER LOS DATOS,ME PODRIAN AYUDAR CON EL CODIGO
Normalmente consulto precios de recambios de que forma pudiera en lazar excel con free download managers tienen alguna experiencia
Hola Arístides:
No tengo experiencia con el programa que indicas. En el post está explicado para obtener los datos de una web. Siento no poder ayudarte.
Saludos.
Un duda sobre la macro, ¿cómo sabes que es la tabla 9 la que tiene que extraer de la página web?
Hola Juan:
Para conocer el número de la tabla, previamente debes explorar los elementos web de la página a la que deseas acceder. Eso puedes hacer pulsando F12 donde se abrirá una nueva ventana en la que podrás explorar todos los elementos, y en el caso de las tablas, conocer su ID.
Saludos.
Me ha sido de gran ayuda. Un buen trabajo. Sin embargo cuando intento bajar tablas un poco grandes, solo obtengo datos hasta una determinada fila.
Por ejemplo, en esta página: https://es.investing.com/crypto/currencies al activar la opción de «Todas las cryptomonedas» sólo me bajan las primeras 100 filas. Supongo que hay algún parámetro avanzado para conseguir tener toda la tabla, pero he sido incapaz de encontrar nada.
Puedes ayudarme?
Gracias de antemano y saludos,
Enrique.
Hola Enrique:
Creo que para ver esa tabla uno debe darse de alta en la web y eso no lo puedo hacer. Debes investigar el nombre de la tabla con todos los datos y el número de la misma. Eso lo logras cuando tienes delante esa tabla completa y pulsas botón derecho en el ratón y luego Inspeccionar, ahí verás los elementos de la página y los nombres.
Saludos