Hola que tal?
El otro día un usuario me puso una consulta para saber si hay alguna manera de importar una tabla de Internet a Excel.
Y si que la hay. Bueno a veces basta con seleccionar los datos y copiar y pegar, aunque a veces el formato viene con bastantes problemas.
También hay veces que la opción de descargar a Excel existe con lo que es muy fácil.
Pero hay veces que ni lo uno ni lo otro.
Y entonces es cuando viene VBA a nuestro rescate!
Veamos cómo.
Una cosa que muy importante para obtener el resultado deseado es identificar en el código fuente de la Web el nombre o Id de la 'Table'.
Imaginemos que queremos tener un ranking de todas las criptomonedas, y por ejemplo obtenemos una web como la siguiente:
https://es.investing.com/crypto/currencies
Para obtener el Id de la tabla se hace lo siguiente:
1. Se pincha el botón derecho del ratón en un lugar de la tabla, y hacemos 'inspect/inspeccionar elemento'
2. Ahora en el código buscamos el Id.
Si un código HTML te resulta muy extraño de ver, puedes buscar la parte <table y el id se encontrará allí.
En mi caso, el Id de la tabla que deseo importar es "top_crypto_tbl".
Este id será utilizado en el código de VBA, el cual presentamos a continuación.
Sub importartblhtml()
Dim appIE
As Object
Dim allRowOfData As
Object
Dim curHTMLRow As
Object
Dim Fila As
Long, Col As Long
Dim
Celda As Object
'lo mejor es usar Internet Explorer al estar reconocido
como aplicación en VBA
Set
appIE = CreateObject("internetexplorer.application")
With appIE
.Visible = True
.navigate
"https://es.investing.com/crypto/currencies"
While
.Busy = True Or
.readyState < 4: DoEvents: Wend
'nos aseguramos
que la web se ha descargado completamente
'Preparamos
nuestra hoja de Excel
ThisWorkbook.Sheets("Descarga").Activate
Cells.Select
Selection.ClearContents 'limpiamos contenidos
'identificamos la Tabla, mediante su Id, para cargarla
Set
allRowOfData = appIE.document.getElementById("top_crypto_tbl")
'La Fila 0 sería los títulos de la tabla con lo que no lo
necesitamos
'Recorremos las filas y columnas de la Tabla en HTML
For
Fila = 1 To allRowOfData.Rows.Length - 1
Set curHTMLRow = allRowOfData.Rows(Fila)
For Col = 0 To
curHTMLRow.Cells.Length - 1
'llevamos
los datos a Excel
Set Celda =
Sheets("Descarga").Cells(Fila + 1, Col + 1)
Celda.Value =
"'" & curHTMLRow.Cells(Col).innerText
'convertimos
los valores numéricos como número...
If
IsNumeric(Celda) Then Celda.Value =
Replace(Celda.Value, ",", ".")
Next Col
Next Fila
'Cerramos
Internet Explorer
.Quit
End With
' quitamos todo
de la memoria
Set
appIE = Nothing
Set curHTMLRow = Nothing
Set Celda = Nothing
End Sub
Bueno pues ese código te ayudará a importar los datos a Excel, pero déjame hacer una aclaración. Se ha de tener cuidado, prestando atención a los separadores decimales, asegurandose que Excel los ha tratado de la misma manera que la Web de donde provienen.
Y con eso, ya está! Espero que este código ayude a muchos de mis lectores.
Saludos
Te ha gustado el artículo?
No te olvides de mostrar tu gratitud hacia el autor (yo) mediante una de las 2 siguientes acciones:
1. Puedes dejar una donación pinchando en la siguiente imagen.
2. Puedes recomendar el artículo en Google haciendo clic en g+1 (justo después del artículo), también puedes compartirlo en Facebook, y/o dejar comentarios.
Quieres aprender más en Excel o tienes algún problema que necesita solución?
Puedo ofrecer servicios de consultoría así como cursos personalizados online. Mírate el siguiente enlace si estás interesado/a.
El Sabio de Excel busca colaborades del blog
Si te interesa compartir tu conocimiento sobre Excel de tal manera que puedas ayudar a otras personas, por favor mándame un email a elsabiodeexcel@gmail.com
Subscríbete y recibe todos las entradas por email
Para ello regístrate suministrando tu email en el sitio "Recibe los trucos en tu email" del menú de la derecha.
Para ello regístrate suministrando tu email en el sitio "Recibe los trucos en tu email" del menú de la derecha.
y si en la web la tabla no tiene id? que se puede hacer?
ResponderEliminarComo hago para copiar sólo algunas celdas de la tabla
ResponderEliminarY si no tiene Id la tabla?
ResponderEliminarSaludos