Obtener datos externos de una página Web en Excel

Estándar

Ya anteriormente he publicado el hacer uso de técnicas como el web scraping para extraer información de páginas web por medio de programación en VBA/Excel. Pero hay algunas ocasiones en que extraer información puede hacerse de una manera fácil y rápida que no amerite programación alguna, pudiendo hacer uso de la importación de datos externos de una web en Excel. Este método funciona principalmente si los datos que queremos extraer se encuentran en un formato tabular (tabla HTML) como pueden ser cotizaciones. La ventaja de usar este método es que es muy fácil, no se programa e incluso se puede estar descargando los datos cada “n” minutos especificados en la consulta.

Les comparto un video con el ejemplo.

Ordenación de datos

Estándar

En el mundo de la informática, quizá no haya tareas más fundamentales o tan extensamente analizadas como lo son la ordenación y la búsqueda. Estas rutinas se utilizan virtualmente en todos los programas de bases de datos, así como en compiladores, intérpretes y sistemas operativos.

La ordenación es el proceso de colocar un conjunto de elementos similares de información en un orden ascendente o descendente.

Existen básicamente tres métodos generales que se pueden usar para ordenar arrays:

  • Por intercambio
  • Por selección
  • Por inserción

Imaginemos una baraja de cartas. Para ordenar las cartas por “intercambio”, se extenderían las cartas boca arriba, sobre una mesa y se procedería a intercambiar las cartas que no están en orden hasta que la baraja estuviese ordenada.

Para ordenar por “selección” se extenderían las cartas sobre la mesa, se seleccionaría la carta de menor valor y se sacaría de la baraja. Entonces de las cartas que quedan sobre la mesa, se seleccionaría la carta más baja y se colocaría detrás de la que ya se tiene en la mano. Este proceso continuaría hasta que todas las cartas estuviesen en la mano con lo cual las cartas estarían ordenadas.

Para ordenar por “inserción“, se mantendrían las cartas en la mano cogiendo una cada vez. Mientras se cogen cartas de una mano, se van colocando en un mazo sobre la mesa, siempre insertándolas en la posición correcta. La baraja estaría ordenada cuando ya no queden cartas en la mano. Les comparto una macro con el código de ejemplo de cada uno de los algoritmos de ordenación.

Mas adelante estare publicando algoritmos mas avanzados de ordenación.

RFO Basic

Estándar

¿Qué es RFO Basic y por qué usarlo?

RFO Basic es una herramienta única, la cual es simple y productiva que puede ser usada para crear poderosas apps para teléfonos y dispositivos Android.

RFO Basic corre directamente desde un celular Android, es pequeño y por lo mismo no requiere ningún software adicional instalado en la PC, aunque se pueden crear aplicaciones desde la PC si se instala el IDE de Eclipse y la API Android con lo cual se pueden producir archivos APK (apps, programas) los cuales pueden ser distribuidos en la tienda de Android. Para todos aquellos que quieran una solución simple de desarrollo existe un pequeño programa para Windows que automáticamente creara archivos APK sin necesidad de tener conocimientos adicionales para el entorno de Android.

Continuar leyendo

Utilizando Arrays en VBA – Parte 1

Estándar

Muchos de los estudiantes de programación se sienten intimidados al escuchar la palabra Array (matriz) y evitan en muchos casos el uso de los mismos en sus proyectos, pero esto se debe al poco o mal conocimiento de los mismos. No se diga si se tiene que programar en C, C++ o Java. En estos lenguajes uno puede quedar frustrado al intentar hacer uso de los Arrays. Sin embargo existen otros lenguajes donde usar Arrays es cosa de niños (fácil e intuitivo).

Para el caso de VBA Excel se está en un punto medio, no es tan difícil hacer uso de ellos y realmente pueden hacer que algunas macros tarden tan poco tiempo, el problema de los Arrays en VBA es que existen pocas herramientas a nivel programación que nos brinda el lenguaje para poder procesarlos fácil y rápidamente.

¿Pero que es un array?, ¿Para qué sirve?  y  ¿Cómo se usan?. Antes que nada un array es un tipo de variable como lo es un integer, un string pero con la capacidad especial de poder albergar más de una variable y en el caso de VBA dichas variables pueden ser de distinto tipo.

Todos aquellos que han usado Excel, sean o no programadores ya han trabajado con una matriz o array, pero por supuesto!. Una hoja de cálculo no es más que una matriz (array) bidimensional de más de un millón de filas y poco más de 16 mil columnas (en el caso de Excel 2007 en adelante) y como todos sabemos podemos introducir un número, fecha o texto dentro de una celda, lo mismo es aplicable a los arrays en VBA.

En la próxima entrega empezaremos a trabajar de manera eficiente con los arrays, veremos más propiedades de los mismos y las herramientas que nos brinda VBA para su manipulación.

Cinta de opciones (RibbonX)

Estándar

Como es bien sabido a partir de la versión 2007, Microsoft agrego la cinta de opciones al Office, incluyendo a Excel, a muchos les disgusto el cambio ya que para entonces se podía ocultar, modificar y manipular la barra de menús y herramientas que proporcionaba Excel por medio de VBA. La cinta de opciones desplazo a la barra de menús y herramientas desde entonces.

Aun se puede recurrir a VBA para crear barras de menús y herramientas dentro de la cinta opciones pero no se aprovecha al máximo las prestaciones y personalización de la nueva cinta. Para poder programar la cinta y sacar ventaja de la misma en nuestras macros o aplicativos se puede utilizar Visual Studio u otras herramientas.

En este artículo no explicare como se programa la cinta, si no que les comparto el libro: “RibbonX for Dummies ” el cual explica y brinda números ejemplos para acceder y manipular la cinta de opciones.

Web scraping – Obteniendo la temperatura de los próximos días

Estándar

En esta ocasión vamos a extraer la temperatura de un portal de internet, de la siguiente página: openweathermap.org/city/3530597 que muestra la temperatura de los próximos días de la ciudad de México.

Para efectuar esta tarea haremos uso del objeto Internet Explorer para poder navegar a dicha página y una vez cargada la misma empezamos a realizar la extracción del texto correspondiente y lo vaciamos en las celdas de nuestro libro.

Antes que nada tendremos que agregar la referencia necesaria para trabajar con el navegador de la siguiente forma:

001

Una vez agregada la referencia correspondiente podemos hacer uso las propiedades y métodos del objeto IE y tener la ventaja del intellisense al codificar con el objeto, después de ello procedemos a escribir el siguiente código:


Sub Clima()
Dim oIE As InternetExplorer
Dim sContenido As String
Dim lPosicion As Long
Dim vContenido As Variant
Dim i As Integer
Set oIE = New InternetExplorer 'aqui se crea y se ejecuta una instancia del navegador
With oIE
.Visible = True 'con esta instruccion hacemos visible el navegador
.Navigate "http://openweathermap.org/city/3530597"
'esperamos hasta que se haya cargado la pagina en el navegador
While .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend
sContenido = .Document.body.innertext 'se almacenatodo el texto desplegado por la pagina
'vemos que la cadena "next days" solo aparece una vez en el texto de la pagina y de ahi en adelante viene la
'temperatura de los dias siguiente...
lPosicion = InStr(1, sContenido, "Next Days", vbTextCompare) 'encontramos su posicion
sContenido = Mid(sContenido, lPosicion + Len("Next Days"), 1000) 'cortamos la cadena
vContenido = Split(sContenido, vbNewLine) 'spliteamos por linea de texto
'procesamos cada linea de texto, vemos que las lineas que nos interesan tienen una ma longitud menor a
'40 caracteres (a ojo de buen cubero)
For i = LBound(vContenido) To UBound(vContenido)
If Len(vContenido(i)) > 0 And Len(vContenido(i)) < 40 Then
Range("A65500").End(xlUp).Offset(1, 0) = vContenido(i) 'escribos la info en nuestra hoja de excel
End If
Next
.Offline = False
.Quit 'cerramos el navegador para que no cnsuma memoria
MsgBox "Temperaturas extraidas con éxito", vbInformation
End With
Set oIE = Nothing
End Sub

Aquí comparto la macro con el código de ejemplo.

Realizando “benchmark” en el rendimiento del código en VBA – Pte 2

Estándar

Tal como mencione en la parte anterior de este artículo, comparto con ustedes la clase desarrolla para medir el tiempo que toma una macro, loop, rutina o función en ejecutarse. Dicha clase tiene como nombre: “clsTimer”. La cual nos permite obtener el tiempo consumido en minutos, segundos y milisegundos

Un ejemplo de cómo usar dicha clase seria:

Sub test()
Dim oTimer As clsTimer
Dim i As Long
Dim contador As Long
Set oTimer = New clsTimer
oTimer.StartTimer
For i = 1 To 400000000
contador = contador + 1
Next
MsgBox oTimer.GetElapsedTime(Seconds) & " segundos!", vbInformation
End Sub

Comparto el enlace con el ejemplo y el módulo de clase para que puedan usarlo en sus propios proyectos. Ejemplo