Mediante una consulta de datos externos Excel nos permite analizar datos que se encuentran en otro lugar, y esto incluye desde bases de datos a archivos de texto. Sin duda es una herramienta muy poderosa para poder utilizar toda la capacidad que sabemos emplear de Excel, pero manteniendo los datos originales en su sitio.
Sin embargo, cuando los datos se encuentran en una página web tenemos un problema añadido, y es el de los separadores decimales y de miles.
Con la macro que propongo a continuación, se pueden definir estos separadores para poder leer los datos configurando adecuadamente los separadores.
Siempre lo digo, los ordenadores trabajan con el punto como separador decimal, por mucho que la configuración regional trate de hacernos ver otra cosa. Es normal, todo esto parte de los Estados Unidos, así que internamente las máquinas están en sistema americano nos guste o no.
Y esto qué quiere decir, pues que si la máquina espera un punto como separador decimal, y espera las fechas como mes, día, año. salvo que le digamos otra cosa.
Excel es bastante leal y casi siempre toma la configuración del sistema, con lo que se supone que entiende las cosas tal y como a ti te gusta trabajar, así que suele entender las comas y los puntos de acuerdo a la configuración regional de tu sistema.
Con la mayor parte de las consultas de datos este problema no existe. Si los datos están en una base de datos, los números son números, se guardan como números, así que el decimal está siempre en el sitio correcto y excel lo entiende bien. Incluso en la configuración de un archivo de texto es posible definir los separadores decimales y de miles para que lo lea correctamente independientemente de la configuración regional.
Sin embargo con las consultas Web no podemos definir el separador decimal igual que ocurre con las consultas a un archivo de texto. No entiendo por qué no se puede, cuando es algo bastante parecido.
Solución al problema
Lo que sí permite Excel es definir configuración de comas y puntos diferente de la del sistema.
esto está en Opciones de Excel>Avanzadas>Opciones de Edición>...
Por defecto tenemos activada la opción de utilizar los separadores del sistema (es lo más lógico), pero podemos cambiarlo si en algún caso necesitamos manipular algún archivo que tenga otra configuración.
Para no tener que andar modificando manualmente la configuración, con la siguiente macro realizo este cambio, luego actualizo la consulta y una vez actualizada, se vuelve a dejar la configuración como estaba.
Para poder reutilizarla empleo tres argumentos:
MiConsulta: es un objeto que representa la consulta que se quiere actualizar.
SepDecimalDatos: es el separador decimal que tienen los datos en la web
SepMilesDatos: es el separador de miles que tienen los datos en la web, es opcional, si no hay separador de miles en los datos no es necesario utilizarlo
Sub ActualizarConsultaSeparadores(MiConsulta As Object, SepDecimalDatos As String, Optional SepMilesDatos As String = "")
' Ya sé Excel, pero necesito más: www.necesitomas.com/excel
' macro para entender separadores de miles y decimal en consultas (especialmente las web, que no permiten definirlo).
' inspirado en (y corrigiendo un poco) lo que vi en http://msdn.microsoft.com/en-us/library/aa203721(office.11).aspx
Dim strDecimal, strThousand, boolUseSystem
With Application
'Guardamos la configuración para luego poder restituirla cuando terminemos
strDecimal = .DecimalSeparator
strThousand = .ThousandsSeparator
boolUseSystem = .UseSystemSeparators
'Establecemos los separadores según los argumentos de la función, para que
' coincidan con los de la página web
.DecimalSeparator = SepDecimalDatos
.ThousandsSeparator = SepMilesDatos
.UseSystemSeparators = False
'Ingoramos los errores
On Error Resume Next
'Actualizamos la consulta, esperamos que termine
MiConsulta.Refresh BackgroundQuery:=False
'Restituimos la configuración inicial.
.DecimalSeparator = strDecimal
.ThousandsSeparator = strThousand
.UseSystemSeparators = boolUseSystem
End With
End Sub
Si tenemos pocas tablas, por supuesto que también podemos utilizar este cambio de configuración en el evento BeforeRefresh del objeto QueryTable que nos interese, y utilizar el evento AfterRefresh para dejarlo como estaba.
Espero que os resulte de utilidad.
Si quieres dejar un comentario, aquí puedes hacerlo:
Comentarios
Re: consultar datos de la web, comas y puntos.
Yo estoy empezando a pensar en pasarme al lado oscuro.
Programas como HEC-RAS, EPANet o SWMM tienen la culpa...