Como Criar Relatórios SQL no Excel

Neste artigo veja como criar relatórios de SQL Excel com VBA passo-a-passo. Neste exemplo fazemos com access, mas pode ser feito com qualquer banco de dados como por exemplo SQL Server.

Configurações do Relatório SQL

No nosso exemplo de relatório criamos uma planilha de configurações, aonde colocamos as opções de:

  1. Local Banco: Local aonde está o arquivo do banco de dados Access.
  2. Vendedores: Lista com todos os vendedores que poderá selecionar no relatório.
  3. Ordem: Campos do relatório pelos quais pode ordenar o relatório.
  4. Selecionado: Campo que identifica a ordem que será aplicada no gráfico.
Como Criar Relatorios SQL no Excel 1

Relatório com SQL no Excel

O relatório com SQL no Excel tem a seguinte estrutura, nele temos os filtros ao topo, os campos do relatório e a ordem.

Veja que temos aqui os filtros de:

  1. Data Inicial: Data inicial do relatório.
  2. Data final: Data final do período do relatório.
  3. Vendedor: Nome do vendedor que será aplicado no filtro do relatório, podendo deixar em branco no caso queira todos os vendedores.

No campo de ordem você pode selecionar qualquer ordem do relatório, ele será aplicado de forma crescente ou decrescente.

Como Criar Relatorios SQL no Excel 2

Código VBA para o Relatório SQL

No relatório SQL colocamos o código abaixo.

Para fazer isso primeiro habilite as macros, clique neste link e faça desta forma: https://www.guiadoexcel.com.br/as-macros-foram-desabilitadas-como-habilitar-macros-no-excel/

Clique então em Inserir->Módulo e coloque o código conforme vemos abaixo:

Como Criar Relatorios SQL no Excel 3
Option Explicit

Global cnn As ADODB.Connection

Private Sub gsConectarBD()
    Dim SQL As String
    
    If cnn Is Nothing Then
        Set cnn = New ADODB.Connection
    End If
    
    If cnn.State <> 1 Then
        'String de conexão VBA Access
        SQL = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & Configuracoes.Range("localBanco").Value & ";" & " Jet OLEDB:Database"
        
        cnn.Open SQL
    End If
End Sub

Private Sub gsDesconectarBD()
    On Error Resume Next
    
    cnn.Close
End Sub

Public Sub lsRelatorioComissoes()
    On Error GoTo TratarErro
    
    Dim lsql        As String
    Dim lrs         As ADODB.Recordset
    Dim lsht        As Worksheet
    Dim tbl         As ListObject
    
    'Conectar
    gsConectarBD
    
    Set lrs = New ADODB.Recordset
    Set lsht = relComissoes
    Set tbl = lsht.ListObjects("tRelatorio")
    
    Application.EnableEvents = False
    
    'Limpar a tabela
    If Not tbl Is Nothing Then
        tbl.DataBodyRange.Delete
    End If
    
    lsql = "SELECT VENDA.ID, VENDA.DTVENDA, CATEGORIA.DESCATEGORIA, PRODUTO.DESPRODUTO, " & _
           "VENDEDOR.DESVENDEDOR, PRODUTO.NUMPRECO AS VLRUNIT, VENDA.NUMQTDE, " & _
           "VENDA.NUMQTDE*PRODUTO.NUMPRECO AS TOTAL, VENDEDOR.PERCCOMISSAO, " & _
           "VENDA.NUMQTDE*PRODUTO.NUMPRECO*VENDEDOR.PERCCOMISSAO AS COMISSAO " & _
           "FROM ((VENDA INNER JOIN PRODUTO ON VENDA.IDPRODUTO = PRODUTO.ID) " & _
           "INNER JOIN CATEGORIA ON PRODUTO.IDCATEGORIA = CATEGORIA.ID) " & _
           "INNER JOIN VENDEDOR ON VENDA.IDVENDEDOR = VENDEDOR.ID " & _
           "WHERE (((VENDA.DTVENDA) Between @datainicial And @datafinal) AND " & _
           "((VENDEDOR.DESVENDEDOR) @vendedor)) ORDER BY @ordem @forma;"
           
    lsql = Replace(lsql, "@datainicial", "#" & Format(lsht.Range("dtini"), "mm/dd/yyyy") & "#")
    lsql = Replace(lsql, "@datafinal", "#" & Format(lsht.Range("dtfim"), "mm/dd/yyyy") & "#")
    
    If lsht.Range("vendedor").Value <> "" Then
        lsql = Replace(lsql, "@vendedor", "='" & lsht.Range("vendedor") & "'")
    Else
        lsql = Replace(lsql, "@vendedor", "<>""""")
    End If
    
    lsql = Replace(lsql, "@ordem", Configuracoes.Range("ordem").Value)
    
    If lsht.Range("forma").Value = "Crescente" Then
        lsql = Replace(lsql, "@forma", "ASC")
    Else
        lsql = Replace(lsql, "@forma", "DESC")
    End If
    
    'Consulta
    lrs.Open lsql, cnn, adOpenStatic, adLockBatchOptimistic
    
    'Carrega na planilha
    lsht.Range("B12").CopyFromRecordset lrs
    
Sair:
    Application.EnableEvents = True
    Exit Sub
TratarErro:
    MsgBox "Erro na aplicação: " & CStr(Err.Number) & " - " & Err.Description
    GoTo Sair
    Resume
End Sub

O código acima realiza a conexão com o banco de dados Access e realiza uma consulta com os parâmetros presentes no relatório, além da ordem dos campos que serão aplicadas.

Para mudar e fazer uma conexão com outros bancos de dados é necessário mudar a String de conexão.

No site: https://www.connectionstrings.com/ você pode pegar a string de conexão para vários tipos de bancos:

Como Criar Relatorios SQL no Excel 7

Download Planilha Como Criar Relatórios SQL no Excel

Clique no botão abaixo para realizar o  download do Excel de exemplo:

Baixe a planilha


Marcos Rieper

Pai, marido, professor e consultor em Excel.

Obrigado por ler este artigo, este blog foi criado para difundir o conhecimento em Excel à todos.

Divulgamos novos artigos nas redes sociais, basta clicar nos ícones abaixo.

Excel não precisa ser complicado

Assine nossa newsletter e receba dicas práticas para dominar o excel