Como realizar consultas SQL no Excel 2003 e versões anteriores usando VBA
Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2011/04/consultas-sql-no-excel-2003-e-versoes.html
Neste artigo, eu escrevo sobre usar o Excel como um banco de dados e fazer consultas nele. Nós vamos executar um comando SELECT para retornar os dados da planilha.
Adicione referência à biblioteca do ADO
Você deve adicionar referência à biblioteca Microsoft ActiveX Data Objects 2.1 Library.
Crie uma conexão com a planilha
Sub consulta_excel()
Dim cn As ADODB.Connection
Dim cnString As String
Set cn = New ADODB.Connection
cnString = "Provider=Microsoft.Jet.OLEDB.4.0;"
cnString = cnString & "Data Source=C:\Documents and Settings\João A. Neto\Meus documentos\MyExcel.xls;"
cnString = cnString & "Extended Properties=Excel 8.0;"
cn.ConnectionString = cnString
cn.Open
cn.Close
Set cn = Nothing
End Sub
Execute a consulta SQL
É importante que você conheça o padrão SQL ANSI para poder executar as consultas.
No caso do excel, o nome da planilha será o nome da tabela, a primeira linha será entendida como o nome das colunas e o restante será considerado como dados.
Sintaxe: SELECT [Nome da Coluna 1], [Nome da Coluna n] FROM [Nome da Planilha$]
O nome da planilha deve ter o "$" no final e envolvido com as chaves "[" e "]".
A planilha que utilizarei como exemplo:
Sub consulta_excel()
Dim cn As ADODB.Connection
Dim cnString As String
Dim rs As Recordset
Dim sqlString As String
Set cn = New ADODB.Connection
cnString = "Provider=Microsoft.Jet.OLEDB.4.0;"
cnString = cnString & "Data Source=C:\Documents and Settings\João A. Neto\Meus documentos\MyExcel.xls;"
cnString = cnString & "Extended Properties=Excel 8.0;"
sqlString = "SELECT Dados, Antiguidade, Valor"
sqlString = sqlString & " FROM [Cotacoes$]"
cn.ConnectionString = cnString
cn.Open
Set rs = New ADODB.Recordset
rs.Open sqlString, cn, adOpenForwardOnly, adLockReadOnly
ThisWorkbook.Worksheets(1).Range("A1").CopyFromRecordset rs
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
CopyFromRecordset - método do objeto Range que copia os dados do Recordset.
Agora, e se os dados da sua planilha não estiverem a partir da célula A1?
Bem, isso é simples de se resolver!
[...]
sqlString = "SELECT Dados, Antiguidade, Valor"
sqlString = sqlString & " FROM [Cotacoes$A2:D12]"
[...]
Depois do "$", você delimita onde estão os seus dados.
Você também pode utilizar intervalo de células nomeado.
[...]
sqlString = "SELECT Dados, Antiguidade, Valor"
sqlString = sqlString & " FROM regiao_dados"
[...]
Fonte: http://www.connectionstrings.com/excel