Hoje vou postar um metodo para buscar dados no Excel utilizando queries SQL. A ideia e criar uma conexao com o proprio arquivo, como se ele fosse um banco de dados externo e suas planilhas, as tabelas.O codigo utiliza uma conexao ADODB para realizar as consultas. Para utilizar o objeto ADODB e necessario adicionar, na janela de codigo, a referencia a biblioteca 'Microsoft ActiveX Data Objects 2.7 Library'. Para fazer isso, no menu 'Ferramentas' selecione a opcao 'Referencias' e seleciona a biblioteca em questao, como mostrado na imagem abaixo.No codigo abaixo, como exemplo, queremos copiar os dados da planilha 'Tabela1' para a planilha 'Teste'. Note que, na query, o nome da planilha e colocado entre colchetes e terminado com o simbolo &. Isso e um padrao do Excel ao tratar as planilhas como tabelas de um banco de dados.'Realiza a busca no banco de dados via query utilizando ADO'Necessario adicionar a referencia 'Microsoft ActiveX Data Objects 2.7 Library''Para fazer isso selecione, na janela de codigo (essa mesma) o menu 'Ferramentas''e a opcao 'Referencias' e marque a biblioteca na lista.Sub BuscaSQL() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim sql_busca As String 'Inicializa a conexao Set cn = New ADODB.Connection 'Inicializa o recordset Set rs = New ADODB.Recordset 'Define parametros do recordset rs.CursorType = adOpenDynamic rs.CursorLocation = adUseClient rs.LockType = adLockBatchOptimistic 'Abre a conexao com o arquivo atual With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=C:\Arquivo.xlsm;Extended Properties=Excel 8.0;" .Open End With 'Define a query SQL a ser executada 'Note que o nome da planilha esta entre colchetes e termina com o simbolo $ 'sql_busca = "SELECT * FROM [Tabela1$] WHERE [Codigo] = 1234" 'Executa a query rs.Open sql_busca, cn 'Copia os dados do recordset para a planilha 'Teste' 'Essa funcao CopyFromRecordset e bem problematica... ThisWorkbook.Worksheets("Teste").Cells.CopyFromRecordset rs 'Fecha o recordset rs.Close 'Fecha a conexao cn.CloseEnd SubSeguem algumas observacoes sobre o codigo acima:Para copiar todos os dados de um recordset para uma planilha, utilizamos a funcao CopyFromRecordset. Essa funcao pode apresentar problemas dependendo da versao utilizada do Excel. Rodei esse codigo utilizando o Excel 2010. Essa funcao recebe o nome do recordset com os dados e o copia para algum Range especificado.A propriedade ConnectionString define o caminho do arquivo a ser aberto como banco de dados. Esse arquivo pode ser o proprio arquivo onde a macro esta sendo executada. Para obter o caminho do arquivo atual pode-se utilizar as propriedades ThisWorkbook.Path e ThisWorkbook.NameAs planilhas no arquivo aberto como banco de dados devem estar no formato de tabela, isto e, a primeira coluna possui os nomes das colunas (que nao devem se repetir), nao devem existir colunas em branco e os registros devem estar dispostos nas linhas.A string de conexao pode ser adaptada para realizar conexoes com arquivos de texto ou outros bancos de dados.Abracos,Lucas Rodrigues O SPSS trabalha basicamente com dois tipos de dados: numeros e textos. As variaveis numericas podem assumir diversos formatos de exibicao na tabela, porem todas tem as mesmas propriedades. Variaveis que armazenam data e hora tambem sao variaveis numericas, mas estao disfarcadas pelo formato de exibicao.Para criar uma