TOP

Consulta SQL en Excel VBA

Hay muchas formas de obtener datos de fuentes externas en una hoja Excel. En este artículo, veremos cómo consultar datos de un archivo de base de datos de MS Access y de un archivo Excel usando SQL en VBA. Sí, ¡vamos a mezclar algo de SQL con VBA! ¡Y es mejor de lo que piensas!

SQL significa lenguaje de consulta estructurado y es un lenguaje utilizado para recuperar información de bases de datos (como MS Access, MS SQL Server, Oracle, Sybase, SAP, MySQL y otros).

También puede obtener datos de Internet, archivos de texto u otros archivos Excel o CSV.


1. Consulta SQL desde Excel VBA al archivo MS Access

Entonces necesitamos una conexión a la base de datos (variable varConn en la macro siguiente) y una consulta SQL (variable varSQL) para automatizar la recuperación de datos de la base de datos para el informe. El siguiente ejemplo es una consulta SQL que recupera datos de una pequeña base de datos en MS Access.

Haga clic en descargar la base de datos de MS Access. El archivo MS Access tendrá este aspecto:

Escribamos nuestra macro que ejecutará la consulta SQL.

Abre el menú Servicio - Macros - Editor Visual Basic, insert un nuevo módulo (Menú Insertar - Módulo) y copia allí el texto de la macro:

Sub SQLQuery_1()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Access Driver (*.mdb, *.accdb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Haga clic en guardar y regrese a Excel. Seleccione el nombre de nuestra macro "SQLQuery_1" en el menú Ver - Macros (Alt+F8). Aparecerá un cuadro de diálogo, haga clic en Base de datos..., busque nuestro archivo Access y haga clic en Aceptar.

Ahora podemos ver que nuestra consulta de macro ha extraído las columnas Monh, Producto y Ciudad de la tabla Sumproduct de la base de datos test.mdb al archivo Excel.

2. Consulta SQL desde VBA al archivo cerrado Excel

De manera similar, podemos obtener datos de un archivo Excel normal como si fuera una base de datos. Para hacer esto, necesitamos reescribir un poco nuestro código de macro y cambiar el controlador de conexión de Access a Excel.

Exportamos la tabla Sumproduct de Access a Excel y guardamos el archivo. A continuación, insertamos nuestro código modificado en un nuevo módulo y ejecutamos la macro:

Sub SQLQuery_2()
Dim varConn As String
Dim varSQL  As String

    Range("A1").CurrentRegion.ClearContents

    varConn = "ODBC;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"

    varSQL = "SELECT Month, Product, City FROM Sumproduct"

         With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
             .CommandText = varSQL
             .Refresh BackgroundQuery:=False
         End With
End Sub 

Aparecerá una ventana donde podremos seleccionar nuestro archivo Excel (debe llamarse Sumproduct.xlsx o con una extensión diferente). Lo encontramos y lo seleccionamos. Haga clic en Aceptar y obtendremos los mismos datos que el archivo de Access.

Artículos sobre el tema:

  • Importar datos de Access a Excel