DESCARGAR DATOS UTILIZANDO UNA CONSULTA WEB

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í:

descargar-datos-utilizando-una-consulta-web

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:

descargar-datos-utilizando-una-consulta-web

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:

descargar-datos-utilizando-una-consulta-web2

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 http://www.finanzas.com/ibex-35/ y utilizando la tabla “8” (solo tenéis que cambiar el código).

Saludos 🙂

Anuncios

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s