grafico-calibrador

GENERAR UN GRÁFICO CALIBRADOR DE PROCESOS

Hola a todos!. ¿Qué tal estáis?, espero que bien.

Llevo ya tiempo sin subir ninguna actualización a Excel Signum, pero es que estos días he tenido bastante de todo y muy poco de tiempo!!.

La entrada de hoy va a ser sobre gráficos, quizás una temática de Excel que en este blog, orientado básicamente a programación, no he tratado demasiado. En el post de hoy quiero tratar un tipo de gráfico en particular, mejor dicho, la confección de un gráfico para un tipo de dato en particular, esto es, un gráfico al que se suele denominar “Calibrador de Procesos”.

Para resumir de una forma adecuada lo que es, no hay mejor forma que hacerlo mediante un ejemplo:

Imaginad que somos agentes comerciales de una determinada empresa y cada mes tenemos que reportar un informe de ventas a nuestros superiores. Hemos decidido que mostraríamos los resultados en % logrado de un máximo de un 100%. Pero como queremos que nuestro informe sea más visual y profesional, vamos a incluir un gráfico que muestre el avance de nuestros objetivos. Dado que estamos en la primera semana del mes, hemos conseguido un 38% de logro, (vamos muy bien!!) y acompañamos los resultado con este gráfico:

grafico-calibrador

Como podéis ver, el formato es parecido al velocímetro de un coche, donde vamos marcando el avance de los resultado de forma gráfica.

Para realizar este gráfico, debemos trabajar previamente una serie de datos en nuestra hoja Excel:

En una celda, vamos a incluir el % que queremos ver reflejado, en este caso el 38% y la celda será la B1, es dato lo iremos actualizando, bien de forma automática con una fórmula o bien manualmente.

Ahora debemos incluir los tres datos siguientes, que quedarán fijos y que se actualizarán automáticamente y serán la fuente de datos del gráfico:

En una celda (B4) incluiremos la siguiente fórmula: =MIN(B1;100%)/2 
con esta fórmula vamos a determinar el % de logro, lo que llevamos realizado. Por ello de los dos datos incluido en la función, donde 100% es el máximo, mostramos el mínimo, que es el dato en B1, es decir, el 38% y lo dividimos entre 2, dado que estamos trabajando con la mitad de un gráfico circular.

En la siguiente celda (B5) obtendremos lo que nos falta de nuestros objetivos y esto lo haremos restando el resultado de B4 menos el 50% que hemos insertado en la celda B6.

Esto es lo que deberíais tener en la hoja:

grafico-calibrador1

El hecho de tomar solo el 50% es que solo vamos a utilizar la mitad del gráfico circular, la otra mitad la vamos a ocultar. Ahora que tenemos los datos, vamos a por el gráfico:

Seleccionamos B4:B6 e insertamos un gráfico circular:

grafico-calibrador5

Como podéis apreciar, vemos que el gráfico debería estar colocado con la parte verde, que representa el 50% que queremos ocultar en la parte inferior, y sin embargo está en la izquierda.

Para resolver este problema, seleccionamos el gráfico y pulsamos en “Formato de punto de datos”, una vez en la nueva ventana, en opciones de serie, damos 270 puntos de giro y aceptamos.

grafico-calibrador3

Ahora  que ya está correctamente orientado el siguiente paso será ocultar la parte del 50%, para ellos vamos a pulsar sobre el 50% que queremos ocultar y de nuevo “Formato de punto de datos” y en “Relleno” marcamos “Sin relleno“:

grafico-calibrador2

Y ya está, ya tenemos casi acabado nuestro gráfico. Ahora solo queda ponerle un título y utilizando un cuadro de texto que vamos a vincular a la celda B1 mostraremos siempre el % al lado del título, así:

grafico-calibrador

Ha sido un post muy sencillo y donde en la web podréis encontrar multitud de ejemplos. Ahora solo queda que le deis un formato adecuado y realicéis el mismo proceso para el resto de objetivos, os quedará un gran informe.

Y esto ha sido todo, os dejo como siempre el archivo de ejemplo, espero que os sea de utilidad.

Descarga el archivo de ejemplo pulsando en: GENERAR UN GRÁFICO CALIBRADOR DE PROCESOS

 

ENVIAR DATOS DESDE EXCEL A UNA PAGINA WEB – FORMULARIO

Hola a todos:

Hace unos días me enviaban una consulta sobre cómo podían enviar a través de Excel datos para introducir valores en un formulario web. Aunque la respuesta ya la adelanté en esta web me ha parecido interesante publicarla en una entrada.

Para poder realizar el trabajo debemos usar VBA y para ello es necesario que tengamos en cuenta algunos aspectos de la página web en cuestión y los elementos que vamos a necesitar para poder realizar la consulta.

Como ejemplo voy a utilizar mi web, de manera que mediante  código sea capaz de ingresar en su cuadro de búsqueda un valor, por ejemplo: “API” y que realice la búsqueda. Es decir, que sea capaz de enviar datos a una web, la mía,  y a un cuadro de texto (parecido a un formulario) y generar la búsqueda.

Para ello, vamos a utilizar la siguiente macro:

Sub CARGAR_DATOS_WEB()
Dim IE As Object
Application.ScreenUpdating = False
'Creamos objeto internet explorer
Set IE = CreateObject("InternetExplorer.Application")
'abrimos web
IE.navigate "https://excelsignum.com/"
'esperamos a que se carguen todos los elementos
Do Until IE.ReadyState = 4
DoEvents
Loop
'si necesitamos más tiempo lo podemos configurar aquí
Application.Wait (Now + TimeValue("0:00:01"))
'localizamos el ID que hace referencia al cuadro de búsqueda
'esto lo hacemos buscando en el código HTML de la página web
'e igualamos el valor de la celda para realizar la búsqueda
IE.document.getElementById("s").Value = "API" '
'también buscamos ID correspondiente al botón para buscar el valor
IE.document.getElementById("searchsubmit").Click
'hacemos visible la web.
IE.Visible = True
Set IE = Nothing
Application.ScreenUpdating = True
End Sub

Como podéis observar, es de gran importancia que seamos capaces de identificar los ID´s de cada uno de los elementos, es decir, del buscador y del botón para realizar la búsqueda.

Esto lo podemos hacer de varias formas, o bien rastreamos el código HTML de toda la web o bien nos posicionamos encima del buscador y pulsamos botón derecho:

enviar-datos-desde-excel-a-una-pagina-web_formulario1

y se abrirá la ventana de inspección con el ID o Name que necesitamos:

enviar-datos-desde-excel-a-una-pagina-web_formulario

Como podéis ver Para el buscador el ID es “s” y para el botón de búsqueda el procedimiento será idéntico.

Una vez que tenemos los ID´s ya podemos introducirlos en la macro y ejecutarla, el resultado que esperamos es ver una búsqueda de la palabra “API” en Excel Signum, es decir, esto:

enviar-datos-desde-excel-a-una-pagina-web_formulario2

Obviamente si hablamos de un formulario web, tendremos que identificar el elemento adecuado, si se trata de un ID o un Nombre y realizar tantas referencias como sean necesarias.

Esta vez no pondré archivo de descarga, el motivo es que no es necesario, tan solo hay que copiar la macro en un módulo, adaptarla y ejecutarla.

Espero que os sea de utilidad 🙂

EXPORTAR UNA TABLA O CONSULTA DE ACCESS A EXCEL CON ADO

Hola a todos:

Aunque esta web está dedicada básicamente a Excel, hoy voy a trabajar un poco con Access. En muchas ocasiones, cuando combinamos ambos programas (Excel y Access) obtenemos grandes resultados. El tema de hoy trata precisamente de cómo podemos realizar un pequeño proceso en ADO para exportar una tabla o consulta que tenemos en Access (desde Access).

Sobre ADO hay bastantes ejemplos en esta web, pero en ninguno de ellos programo directamente en Access, hoy lo voy a hacer.

Utilizaremos un ejemplo simple, para ello tenemos una tabla en Access con los datos de los empleados de unos grandes almacenes (la base de datos que siempre pongo de ejemplo):

exportar-una-tabla-o-consulta-de-access-a-excel-con-ado

Esta tabla se denomina DATOS y nuestra intención es exportarla a Excel. Para ello vamos a utilizar la siguiente macro que pegaremos en el editor de VBA de Access:

Option Compare Database
Sub ExporExcel()
Dim APIExcel As Object
Dim AddLibro As Object
Dim AddHoja As Object
Dim nombreHoja As String
Dim i As Integer
Dim consulta As New ADODB.Recordset
'Creamos conexión y recorset
Set cnn = CurrentProject.Connection
consulta.Open "SELECT * FROM DATOS", cnn, adOpenForwardOnly, adLockReadOnly
'Damos nombre a la hoja con la que vamos a exportar los datos
nombreHoja = "DATOS"
'Creamos objeto excel y nuevo libro y no mostramos el archivo
Set APIExcel = CreateObject("Excel.Application")
Set AddLibro = APIExcel.Workbooks.Add
APIExcel.Visible = False
'Añadimos hoja al libro nuevo y nombramos pestaña
Set AddHoja = AddLibro.Worksheets(1)
If Len(nombreHoja) > 0 Then AddHoja.Name = Left(nombreHoja, 30)
'Traemos los datos de cabecera de la tabla Access y los pegamos en la hoja excel
columnas = consulta.Fields.Count
For i = 0 To columnas - 1
APIExcel.Cells(1, i + 1) = consulta.Fields(i).Name
Next i
'Pegamos los datos de la tabla en la nueva hoja
consulta.MoveFirst
AddHoja.Range("A2").CopyFromRecordset consulta
'Damos formato a las columnas, ajustando contenidos
With APIExcel.ActiveSheet.Cells
.Select
.EntireColumn.AutoFit
.Range("A1").Select
End With
'Mostramos la hoja
APIExcel.Visible = True
'cerramos los objetos de la consulta
consulta.Close
cnn.Close
End Sub

Antes de finalizar, os recuerdo la necesidad de marcar en las referencias la librería de ADO Activex Data Objects 2.8 Library, es importante que lo hagáis, de lo contrario, la macro no va a funcionar.

exportar-una-tabla-o-consulta-de-access-a-excel-con-ado2

Y ahora que tenemos la macro lista, podemos ejecutarla y veremos como la macra, crea un archivo Excel y pasa los datos de la consulta a una pestaña que va a renombrar con el nombre de DATOS.

En la propia macro ya os voy comentando qué es lo que hace cada línea de código, así que no quiero ser repetitivo, pero es interensate el uso de “CurrentProject.Connection” dado que nos ahorra todo el trabaja de definir la conexión.

El resultado de la macro es el siguiente:

exportar-una-tabla-o-consulta-de-access-a-excel-con-ado3

Y esto ha sido todo, espero que os resulte de interés y de utilidad 🙂

Os dejo el arhcivo en Google Drive (en WordPress no es posible subir archivos de Access).

Descarga el archivo de ejemplo pulsando en: EXPORTAR UNA TABLA O CONSULTA DE ACCESS A EXCEL CON ADO

EMOCIONES Y PASIÓN POR LO QUE HACES

Si alguien me dijese hace 6 años que actualmente estaría trabajando con bases de datos, analizando y extrayendo datos y confeccionando decenas de informes y aplicaciones, no me lo creería.

La verdad es que hace seis años, precisamente estaba trabajando como analista, pero no de datos, sino de riesgos (bancarios). Y la verdad es que me entusiasmaba lo que hacía, cada uno de los pasos del análisis, desgranando toda la información y obteniendo un dictamen en base a determinados criterios.

Pero el futuro (como lo dijo en algún momento Paul Valéry), ya no es lo que era. Una circunstancia que solo conocen mis amigos más cercanos y mi familia, hizo que todo cambiase, radicalmente. A finales de 2010, cuando trabajaba en Barcelona y mi vida prácticamente estaba establecida en esta gran ciudad, recibí la desagradable noticia de que mi madre tenía cáncer, y el pronóstico no era bueno.

Como os imaginaréis, y supongo que algunos de vosotros/as también habréis pasado por este duro momento, fue el golpe más grande que he recibido en mi vida. En ese momento, no tuve la más mínima duda, debía volver a Galicia y aprovechar el poco tiempo que le quedaba de vida estando a su lado.

Y así fue, la empresa me trasladó a Coruña, (estaba relativamente cerca de mi pueblo natal, lo que me permitía poder verla y estar ahí).

Durante el año que estuve en Coruña, que por desgracia fue el tiempo que mi madre pudo resistir esa maldita enfermedad, me propusieron trabajar en un departamento relacionado con los sistemas de información y bases de datos. A mi siempre me gustó trabajar con datos, hoja de cálculo, ofimática en general, pero ahora se me presentaba la oportunidad de hacerlo profesionalmente y era una oportunidad que quería aprovechar.

Fue un proceso duro, trabajé muy intensamente aprendiendo a programar, a generar bases de datos, a analizar la información, a trabajar con funciones estadísticas. Durante un año trabajé y me exigí lo máximo, quizás fuese la vía de escape para canalizar mi frustración ante mi situación familiar, pero puedo asegurar que aprendí.

Y me acerqué a todo lugar donde pudiese adquirir conocimientos, a foros, a páginas web, a prácticas en mis proyectos, a aprender de los errores y sobre todo a la experiencia del compañero que tuve a mi lado en aquel momento, que estaba a apunto de jubilarse y con una competencia y desempeño impresionantes, él me enseñó todo lo que sabía y me dijo que, (aunque no programaba en VBA, sí lo hacía en FoxPro) si quería ser un profesional en el mundo del análisis de datos debería aprender a programar y me mostró como lo utilizaba FoxPro y los resultados que podía conseguir en unos pocos minutos.

Esa fue la clave, comprobar cómo una tarea que podía durar horas, se podía realizar en minutos o segundos, y además sin prácticamente riesgo de error o equivocación.

Y así he estado trabajando durando 5 años, sin parar, aprendiendo cada día una cosa nueva, nuevos métodos, nuevas tecnologías. Fruto de esa pasión es esta web, que por hobby mantengo y voy actualizando cada cierto tiempo.

Muchas personas me preguntan, ¿cómo has conseguido aprender a programar en Excel? o ¿cómo has llegado a tener ese nivel en Excel?. Y yo contesto siempre lo mismo, el nivel que uno posee es relativo, siempre depende de las horas que dediques, del interés que muestres y lo humilde que seas. Porque el nivel nunca es suficiente, siempre existen nuevos retos.

¿Dónde aprendí?, en el trabajo diario, en las dudas, en consultar foros, webs, en intentarlo una y otra vez. Existen manuales, pero son orientativos, lo importante es que entiendas las funciones, los comandos, los métodos. En pocas palabras, ¡depende de tí!.

Es importante comprender que no solo estamos hablando de tecnología, estamos hablando de crecimiento profesional y personal. Desempeñar tu trabajo con profesionalidad, rapidez y eficiencia no solo es un beneficio para la organización en la que trabajas, sino que te consolida como profesional y te ofrece multitud de posibilidades para demostrar (te) lo que realmente eres capaz de hacer.

Hoy ya no está mi madre y yo ya no estoy en Coruña. Hoy mi vida está en Madrid, con un futuro que solo las circunstancias y mi determinación van a definir.

Para finalizar, y como siempre me gusta decir, ¡a seguir adelante!  🙂

funcion-para-traducir-texto-en-nuestra-hoja-excel

FUNCIÓN PARA TRADUCIR TEXTO EN NUESTRA HOJA EXCEL

Hola a todos:

Hace unos días estaba trabajando con unos textos en inglés, nada relacionado con Excel, sino con unos apuntes de teoría política que me interesaban bastante. Lo cierto es que tuve que recurrir varias veces al traductor de Google, dado que no recordaba el significado concreto de algunas expresiones.

Esto me dio una idea, ¿por qué no confeccionar una función que se sea capaz traducir el valor que contenga una celda en Excel, algo así como “TraducirV”?, pues claro que sí, y es bastante sencillo.

Para hacer nuestro trabajo, vamos a utilizar la siguiente función que obtiene del traductor de google la traducción de la palabra que queremos traducir:

Public Function TRADUCIRV(ByVal palabra As String, input_word As String, output_word As String)
'Declaramos variables
Dim RESPUESTA As String
Dim ie As Object
'Creamos aplicación (internet explorer)
Set ie = CreateObject("InternetExplorer.Application")
ie.navigate ("http://translate.google.com/?") & "hl=es#" & input_word & "/" & output_word & "/" & palabra
'Aunque utilizamos ReadyState, vamos a ralentizar la macro 3 segundos
Application.Wait (Now + TimeValue("0:00:03"))
Do Until ie.ReadyState = 4
DoEvents
Loop
'Obtenemos la traducción, extrayendo el texto por ID
RESPUESTA = ie.Document.getElementById("result_box").innerText
TRADUCIRV = RESPUESTA
ie.Quit
End Function

Con esto ya tenemos en nuestro libro Excel una nueva función, denominada “TRADUCIRV” 🙂

la sintaxis de la función es la siguiente:

=traducirv(texto a traducir;idioma actual;idioma al que queremos traducir)

Por ejemplo, si queremos traducir del español (“es”) al inglés (“en”), esta sería la fórmula:

=traducirv(A2;"es";"en")

Y podemos traducir cualquier texto a cualquier de los idiomas que aparecen en el tractor de Google, por ejemplo, si traducimos “nadie sabe de lo que es capaz hasta que lo intenta” al georgiano (“ka”), la fórmula sería =traducirv(A2;”es”;”ka”) y el resultado sería este: არავინ იცის, რა მას შეუძლია, სანამ ის ცდილობს

funcion-para-traducir-texto-en-nuestra-hoja-excel

En al archivo os dejo los nombres y las abreviaturas de los idiomas del traductor de google, por si queréis probar algunos idiomas.

En la función, cuando hagáis referencia a los idiomas, debéis colocar las abreviaturas en minúsculas y entre comillas dobles, de lo contrario obtendréis un error. (En la función también podéis hacer referencia a la celda que contiene la abreviatura y no tener que escribirla, en ese caso irá sin comillas.)

Otro asunto importante es que algunos idiomas, dependiendo de la versión de Excel  puede que no se muestren correctamente, por ejemplo, el Birmano, en excel 2010 no se muestra, sin embargo en Excel 2016 sí. De hecho, es en 2016 donde se muestran todos los idiomas correctamente.

Pues esto ha sido todo, una pequeña función para poder traducir desde nuestra hoja Éxcel un texto a multitud de idiomas.

Descarga el archivo de ejemplo pulsando en: FUNCIÓN PARA TRADUCIR TEXTO EN NUESTRA HOJA EXCEL

 

api-geolocalizacion-vba-con-formato-xml

API GEOLOCALIZACIÓN EN VBA CON FORMATO XML

La semana pasada escribí un post sobre la geolocalización y cómo podemos adaptar el API de Maps a Excel mediante VBA: API GEOLOCALIZACIÓN EN VBA. En ese ejemplo trabajábamos con un formato de datos de salida de Maps denominado jSON y en el que utilizábamos varias funciones para extraer información de una cadena de datos alfanumérica.

En en mismo post comentaba que en breve realizaría el mismo ejemplo pero utilizando datos de salida XML. Esto implica modificar programación en la función principal y utilizar una única función secundaría.

Antes de mostrar estas funciones os dejo el ejemplo de la respuesta a una consulta a Maps con formato XML:

api-geolocalizacion-vba-con-formato-xml

Como podéis observar existen diferencias significativas en ambos formatos (jSON y XML). Sin embargo, a la hora de programar este tipo de formato nos ayudará a reducir la función, además la he implementado de tal forma que no es necesario el tener que acudir a las referencias a activar la casilla de Microsoft XML, V6.0 dado que la función crea los objetos necesarios para realizar la consulta.

Al igual que en el post anterior conservaremos la función que modifica los caracteres especiales. Haremos referencia a la segunda hoja, que es el lugar en el que los he colocado:

Private Function Caracter_a(ByVal Destino) As String
Dim i As Integer, fin As Integer
With Sheets(2)
fin = Application.CountA(.Range("A:A"))
'Aplicamos un bucle para sustituir caracteres especiales
For i = 1 To fin
Destino = Replace(Destino, .Cells(i, 1), .Cells(i, 2))
Next
Caracter_a = Destino
End With
End Function

Ahora ya podemos insertar la función que nos traerá las coordenadas de latitud y longitud a nuestra hoja, función GeocodingXML

Function GeocodingXML(Destino As String) As String
'Declaramos las variables
Dim Consulta As String
Dim Peticion As Object
Dim Respuesta As Object
Dim iNodos As Object
'Indicamos parámetros de la consulta
Consulta = "http://maps.googleapis.com/maps/api/geocode/xml?" _
& "&address=" & Caracter_a(Destino) & "&sensor=false"
'Creamos los objetos (evitando así tener que marcar referencias en la biblioteca)
Set Peticion = CreateObject("Microsoft.XMLHTTP")
Set Respuesta = CreateObject("Msxml2.DOMDocument.6.0")
Set iNodos = Respuesta.createNode(1, "xml", "")
'Realizamos la consulta
Peticion.Open "GET", Consulta, False
Peticion.send
Respuesta.LoadXML (Peticion.responseText)
'Extraemos las coordenadas
Set iNodos = Respuesta.getElementsByTagName("location")
For i = 0 To iNodos.Length - 1
'Reemplazamos el espacio en blanco entre latitud y longitud por una coma
GeocodingXML = Replace(iNodos(i).Text, " ", ",")
Next
End Function

Si comparáis este código y el del post anterior, veréis que es mucho más corto y que el método para extraer los datos los realizamos mediante el método “getElementsByTadName” lo que nos permite extraer los datos alojados en los nodos del nombre al que hacemos referencia (“location”). Es decir latitud y longitud.

Personalmente suelo utilizamos esta función (y método) cuando trabajo realizando consultas web, es mucho más sencillo.

El resultado es el mismo que en el post anterior:

api-geolocalizacion-vba-con-formato-xml1

Pues eso ha sido todo. Ya tenemos dos UDF listas para extraer las coordenadas de cuaquier lugar que necesitemos.

Saludos 🙂

Descarga el archivo de ejemplo pulsando en: API GEOLOCALIZACIÓN EN VBA CON FORMATO XML

 

api-geolocalizacion-en-vba4

API GEOLOCALIZACIÓN EN VBA

Uno de los post que tiene más visitas en Excel Signum es API MATRIZ DE DISTANCIAS, donde obtenemos el tiempo y la distancia a partir de un origen y un destino, realizando la petición de información a Google Maps.

Hace unos días, un lector me solicitó ayuda para conseguir los datos de geolocalización  de una serie de direcciones (latitud y longitud) y me pareció interesante para realizar una nueva entrada basada en esta consulta.

Antes de nada, comentar que existen varias alternativas para realizar este trabajo, todas ellas pasando por el API de Google Maps de geolocalización. Para este ejemplo usaré el API con formato de datos de salida jSON (en breve os mostraré otra versión con formato XML). Si queréis leer acerca del API y sus especificaciones, podáis hacerlo aquí: Google Maps Geocoding API

Utilizaremos un caso práctico para ilustrar el ejercicio, imaginad que hemos previsto realizar un pequeño viaje y queremos visitar: La Plaza Mayor (Chinchón), El Palacio Real (Aranjuez) y el Alcázar de Toledo. El punto de partida en el que hemos quedado es la Plaza de Santa Ana (Madrid), y queremos obtener las coordenadas de dichos lugares a partir de sus direcciones. Lo indicamos de la siguiente forma en nuestra hoja Excel:

api-geolocalizacion-en-vba

La idea es crear una función que capture el elemento de la columna B (Dirección) y nos devuelva en la columna C las coordenadas de latitud y longitud. Para ello vamos a utilizar 3 funciones. Una será la principal y las otras dos serán secundas pero muy importantes.

Antes de montar la función principal vamos a ver las otras, la primera es Carácter_e:

Private Function Caracter_e(ByVal Destino) As String
Dim i As Integer, fin As Integer
With Sheets(2)
fin = Application.CountA(.Range("A:A"))
'Aplicamos un bucle para sustituir caracteres especiales
For i = 1 To fin
Destino = Replace(Destino, .Cells(i, 1), .Cells(i, 2))
Next
Caracter_e = Destino
End With
End Function

Con esta función, a la hora de pasar los parámetros a Maps, convertimos aquellos caracteres especiales  (ejem: tildes, eñes, etc) que normalmente crear errores a caracteres válidos. Los parámetros los he puesto en la segunda hoja, (en caso de que necesitéis añadir alguno más solo tenéis que indicarlo como el resto):

api-geolocalizacion-en-vba1

La otra función que vamos a utilizar es aquella que extraerá de la cadena de datos solo los números, las comas, los puntos y los guiones.

Public Function Numeros(LatLong As String)
Dim i As Double, j As Double
Dim num As Variant
'extraemos números, comas, guiones y puntos de la cadena alfanumérica
With Sheets(1)
For i = Len(LatLong) To 1 Step -1
If IsNumeric(Mid(LatLong, i, 1)) Or Mid(LatLong, i, 1) = "," Or Mid(LatLong, i, 1) = "-" Or Mid(LatLong, i, 1) = "." Then
j = j + 1
num = Mid(LatLong, i, 1) & num
End If
If j = 1 Then num = (Mid(num, 1, 1))
Next i
Numeros = num
End With
End Function

Esta función (Numeros) es necesaria dado que cuando extraemos los datos mediante la función principal, en formato jSON, tendremos que extraer la información de Latitud y Longitud. Este es el formato de salida:

api-geolocalizacion-en-vba2

Ahora que ya hemos visto estas dos funciones os dejo la función principal Geocoding()

Function Geocoding(Destino As String) As String
Dim Consulta As String
Dim ObjetoXML As Object
Dim Peticion As String
Dim Marcador As Long
Dim sCadena As String
Dim LatLong As String
'Pasamos parámetros de la consulta y aplicamos función caracter_e
'por su tenemos caracteres especiales
Consulta = "http://maps.googleapis.com/maps/api/geocode/json?" _
& "&address=" & Caracter_e(Destino) & "&sensor=false"
'Enviamos la consulta y recibimos respuesta
Set ObjetoXML = CreateObject("Microsoft.XMLHTTP")
ObjetoXML.Open "GET", Consulta, False
ObjetoXML.send
Peticion = ObjetoXML.responseText
'extraemos los datos de latitud y longitud que necesitamos
'de la cadena que hemos obtenido
Marcador = InStr(1, Peticion, "location")
sCadena = Application.WorksheetFunction.Trim(Mid(Peticion, Marcador, 120))
'Para extraer las coordenadas usamos la función Números para que extraiga numeros, puntos, comas y guiones
LatLong = Numeros(Mid(sCadena, InStr(1, sCadena, "{"), (InStr(1, sCadena, "}") - InStr(1, sCadena, "{") + 1)))
'Obtenemos el resultado
Geocoding = LatLong
'Liberamos variable ObjetoXML
Set ObjetoXML = Nothing
End Function

Una vez que tenemos la cadena de texto, solo tendremos que realizar algunos ajustes para extraer los datos que necesitamos y que realizamos con diferentes funciones y recogeremos en las variables Marcador, sCadena y  LatLong

El resultado es el siguiente:

api-geolocalizacion-en-vba3

El botón que he colocado en la página es para visualizar mediante una sencilla macro la ruta que queremos realizar tomando como datos los códigos, está en el módulo2 de la hoja:

Sub Mapa()
Dim URL As String
With Sheets(1)
'Componemos la url para mostrar el mapa con la ruta.
URL = "https://www.google.com/maps/dir/" & .Range("C2") & "/" & .Range("C3") & "/" & .Range("C4") & "/" & .Range("C5")
ActiveWorkbook.FollowHyperlink URL, NewWindow:=False
End With
End Sub

Y la información que pasamos a maps nos muestra el siguiente mapa:

api-geolocalizacion-en-vba4

Como habéis podido comprobar, la información es correcta. He querido utilizar esta forma de extraer información de un archivo jSON para utilizar algunas de las funciones que hemos visto en el blog y demostrar así su utilidad (Números o Carácter_e).

Por último me gustaría recordaros que esta versión del API tiene una limitación diaria a 2.500 consultas. Lo podéis ver aquí: Límites de uso

En los próximos días os mostraré otra función pero trabajando con datos XML y utilizando otras variables y funciones para extraer la misma información.

Pues esto ha sido todo, como siempre os dejo el archivo:

Descarga el archivo de ejemplo pulsando en: API GEOLOCALIZACIÓN EN VBA