Using SQL queries is better way to handle large amount of data in database applications. also, it generates result within a seconds. As, we aware the SQL queries only can be used in Microsoft Access and Microsoft SQL server applications.

In fact, SQL queries can be used in Excel VBA projects to handle large amount of data. Which will enables you to optimize your code for time complexity and output will be generated in fraction of seconds. Which is the core requirement of any VBA automation project.

Moreover, it reduces coding time to write large amount of code for data calculation. It helps you to perform data transformation within the time span which is actually allocated for project development,

Now, We will see how can we use SQL queries in our VBA automation projects. Please refer below code snippets which demonstrate SQL implementation in Excel macro.

Option Explicit

Public cnn As New ADODB.Connection

Public rs As New ADODB.Recordset
Public strSQL As String
Public ErrStatus As Integer

Public Sub OpenDB(ByVal fName As String)

On Error GoTo Handler
ErrStatus = 0
        If cnn.State = adStateOpen Then cnn.Close
        cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & fName
         Exit Sub
End Sub

Public Sub closeRS()

    If rs.State = adStateOpen Then rs.Close
    rs.CursorLocation = adUseClient
End Sub

Sub Fetch_Data_Using_ADODB_Connection()

' Author: Dreams24
' Written for VBA Tricks and tips blog

Dim strSQL As String

' closes recordset if it is open


' Assign path of workbook from which data to be fetched

    OpenDB (ThisWorkbook.Path & "\" & ThisWorkbook.Name)

' Write your query to get your specific column data in output

' Where Raw_Data is your sheet name from which data is fetched.
' Don's forget to append $ symbol with sheet name
' refer below query example

        strSQL = "Select [Column1], [Column2], [Column3] FROM [Raw_Data$]"

        rs.Open strSQL, cnn, adOpenDynamic, adLockPessimistic

' Activate your desired sheet to get the output from above query


' Select cell in which data to be fetched
        Sheets("Output").Range("A1").CopyFromRecordset rs



        Set rs = Nothing

        Set cnn = Nothing

End Sub