EXCEL: Conectar banco de dados MySQL

Para algumas situações onde precisamos resgatar informações existentes em um sistema que faz uso de banco de dados MySQL e desejamos tratar em uma planilha Excel, é interessante utilizar um recurso, que não é nativo, para automatizar tal tarefa. Neste caso é a conexão de banco de dados MySQL diretamente ao Excel.

Baixe o conector ODBC:
https://dev.mysql.com/downloads/connector/odbc

Ele é basicamente uma interface que permite que linguagens de programação que o suportam se comuniquem com um banco de dados MySQL;

Dica: ao clicar em “Download” será carregada uma nova página solicitando login com uma conta free. Não é necessário realizar esse cadastro ou login, somente clique em “No thanks, just start my download.” que é exibido abaixo;

Instale o programa, selecionando a instalação completa (isso é uma sugestão, fica a seu critério);

Após a instalação, pesquise no Menu Iniciar pelo termo ODBC e abra o “Fonte de dados ODBC (xx bits)” ou abra o Painel de Controle, acesse Ferramentas Administrativas e abra o “Fonte de dados ODBC (xx bits)”;

Na janela de Administração de Fonte Dados ODBC, clique em Adicionar;

Na próxima janela selecione MySQL ODBC x.x Driver, o x.x será conforme a versão instalada, e clique em Concluir;

Preencha conforme os dados de acesso ao seu banco de dados;

Clique em Test para testar a conexão. Caso esteja tudo OK, irá aparecer Connection successful. Clique em OK para confirmar a configuração e feche todas as janelas abertas;

Agora abra o Excel e vá em Dados > Conexões Existentes. Na janela que se abre, clique em Procurar Mais…;

Agora clique em Nova fonte de dados…;

Selecione DSN ODBC e clique em Avançar;

Após selecione a conexão criada anteriormente e clique em Avançar;

Na próxima tela, selecione o banco desejado e, se desejado, selecione uma tabela específica para conectar. Sugiro que desmarque essa caixa, pois podemos tratar isso em uma query SQL;

Clique em Avançar. Na próxima tela, serão exibidas informações da nova conexão. Pode deixar como está e clique em Concluir;

Irá aparecer uma nova tela para seleção de tabelas. Selecione a(s) tabela(s) desejada(s) para prosseguirmos. Será possível editar posteriormente via query SQL;

Agora clique em Dados > Conexões. Na janela exibida terá a conexão criada. Clique em Propriedades;

Na próxima tela selecione a aba Definição. No campo Texto do comando é onde você irá fazer a sua query SQL desejada. Depois é só clicar em OK que a consulta será realizada e apresentada na planilha;

Os dados serão carregados na planilha conforme as condições da sua query e já poderá começar a tratar os dados conforme a necessidade.

Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.

Fonte: brunocosta, guiadoexcel, learn.microsoft

EXECEL: Escrevendo valores por extenso

O Excel não tem uma função padrão que exibe números como palavras em português em uma planilha, mas você pode adicionar essa funcionalidade colando o seguinte código de função ValorPorExtenso em um módulo VBA (Visual Basic for Applications).

Antes de iniciar temos que realizar duas configurações no Microsoft Excel:

  • Ativar a guia do desenvolvedor;
  • Habilitar a execução de macros;

Criando uma nova planilha no Excel, após abrir, use o atalho de teclado ALT + F11 para abrir o editor do Visual Basic para criar uma macro,

As macros são programação, mas para usá-las, você não precisa ser um desenvolvedor e nem mesmo ter conhecimento de programação. A maioria das macros que você pode criar nos programas do Office são escritas em uma linguagem chamada Microsoft Visual Basic for Applications, ou VBA. Em muitos programas do Office, você pode criar uma macro gravando uma série de ações ou escrevendo a macro.

Para isso vamos incluir um Módulo em nosso projeto, clique na guia Inserir e, em seguida, clique em módulo.

Após essa operação cole as linhas de código na caixa Module1 (código) :

Function ValorPorExtenso(valor As Double) As String
    Dim strMoeda    As String
    Dim cents       As Variant
    Dim decimalSep  As String
'   Se o valor for igual ou maior que 1 quatrilhao
'   passar erro e sair da funcao
    If valor > 999999999999999# Then
        ValorPorExtenso = "Valor excede 999.999.999.999.999"
        Exit Function
    End If
'   Se valor for igual a 1, a unidade está no singular
    If WorksheetFunction.RoundDown(valor, 0) = 1 Then
'       a string da moeda no singular
        strMoeda = " Real"
'       Se for maior que 1 a unidade está no plural
        ElseIf WorksheetFunction.RoundDown(valor, 0) > 1 Then
            strMoeda = " Reais"
    End If
    
'   Remove os centavos
    cents = valor - WorksheetFunction.RoundDown(valor, 0)
'   Remove os centavos do valor
    valor = valor - CDbl(cents)
'       Passo o extenso dos centavos
        cents = centavos(CDbl(cents) * 100)
'    End If
'   Caso a string seja diferente de branco e valor seja maior ou igual a 1
    If cents <> "" And valor >= 1 Then
'       acrescentar uma vírgula antes do extenso
        cents = " e " & cents
    End If
'   Iniciar o processo de conversao dos valores longos
    strMoeda = Trim(Trilhoes(valor)) & strMoeda & cents
    strMoeda = Replace(strMoeda, ", e", " e")
    strMoeda = Replace(strMoeda, ", r", " r")
    If Left(strMoeda, 2) = "e " Then
        strMoeda = Mid(strMoeda, 3, Len(strMoeda))
        'ElseIf Left(strMoeda, 5) = "mil e" Then
           ' strMoeda = Mid(strMoeda, 5, Len(strMoeda))
    End If
    vzz = "00000000000000000000"
    vtam = Len(Trim(Mid(Trim(valor), 2, 100)))
    If Right(vzz + vzz + vzz + vzz, vtam) = Mid(Trim(valor), 2, 100) And InStr(UCase(strMoeda), UCase("es ")) > 0 Then
        vetor = Split(strMoeda, " ")
        vtrocar = vetor(UBound(vetor))
        strMoeda = Replace(strMoeda, vtrocar, "de " + vtrocar)
    End If
    ValorPorExtenso = strMoeda
End Function
Private Function centavos(valor As Double) As String
    Dim dezena      As Integer
    Dim unidade     As Integer
'   Passa o valor para base decimal
    valor = Round(CDbl(valor / 100), 2)
'   Se for um centavo, escrever valor e sair da funcao
    If valor = 0.01 Then
        centavos = "Um Centavo"
        Exit Function
    End If
'   Repassa valor para dezenas
    valor = valor * 100
'   Se nao houver dezenas no valor passado
    If dezenas(valor) = "" Then
'       a string centavos fica em branco
        centavos = ""
    Else
'       caso contrário, passar extenso das dezenas e concatenar
'       com a palavra centavos
        centavos = dezenas(valor) & " Centavos"
    End If
End Function
Private Function unidades(unidade As Double) As String
    Dim unid(9)
'   Define as unidades a serem usadas
    unid(1) = "Um": unid(6) = "Seis"
    unid(2) = "Dois": unid(7) = "Sete"
    unid(3) = "Três": unid(8) = "Oito"
    unid(4) = "Quatro": unid(9) = "Nove"
    unid(5) = "Cinco"
'   Retorna a string referente a unidade passada para
'   esta funcao
    unidades = Trim(unid(unidade))
End Function
Private Function dezenas(dezena As Double) As String
    Dim dezes(9)
    Dim dez(9)
    Dim intDezena       As Double
    Dim intUnidade      As Double
    Dim tmpStr          As String
'   Define as dezenas a serem utilizadas
    dezes(1) = "Onze": dezes(6) = "Dezesseis"
    dezes(2) = "Doze": dezes(7) = "Dezessete"
    dezes(3) = "Treze": dezes(8) = "Dezoito"
    dezes(4) = "Quatorze": dezes(9) = "Dezenove"
    dezes(5) = "Quinze"

    dez(1) = "Dez": dez(6) = "Sessenta"
    dez(2) = "Vinte": dez(7) = "Setenta"
    dez(3) = "Trinta": dez(8) = "Oitenta"
    dez(4) = "Quarenta": dez(9) = "Noventa"
    dez(5) = "Cinquenta"

'   Calcula o inteiro da dezena
    intDezena = Int(dezena / 10)
'   Calcula o inteiro da unidade
    intUnidade = dezena Mod 10
'   Se o inteiro da dezena for zero
    If intDezena = 0 Then
'       dezenas sao iguais as unidades
        dezenas = unidades(intUnidade)
        Exit Function
    Else:
'       caso contrário, é igual a dez
        dezenas = dez(intDezena)
    End If
'   Se o inteiro da dezena for igual a 1 e
'   o inteiro da unidade for zero, os valores estao
'   entre 11 e 19
    If (intDezena = 1 And intUnidade > 0) Then
        dezenas = dezes(intUnidade)
    Else
'   Caso contrário, valor está entre 20 e 90 inclusive
        If (intDezena > 1 And intUnidade > 0) Then
'           Concatena a string da dezena com a string da unidade
            dezenas = dezenas & " e " & unidades(intUnidade)
        End If
    End If
    dezenas = dezenas
End Function
Private Function centenas(centena As Double) As String
    Dim tmpCento      As Double
    Dim tmpDez        As Double
    Dim tmpUni        As Double
    Dim tmpUniMod     As Double
    Dim tmpModDez     As Double
    Dim centoString   As String
    Dim cento(9)
'   Define as centenas
    cento(1) = "Cento": cento(6) = "Seiscentos"
    cento(2) = "Duzentos": cento(7) = "Setecentos"
    cento(3) = "Trezentos": cento(8) = "Oitocentos"
    cento(4) = "Quatrocentos": cento(9) = "Novecentos"
    cento(5) = "Quinhentos"

'   Calcula o inteiro da centena
    tmpCento = Int(centena / 100)
'   Calcula a parte da dezena
    tmpDez = centena - (tmpCento * 100)
'   Calcula o inteiro da unidade
    tmpUni = Int(tmpDez / 10)
'   Calcula o resto da unidade
    tmpUniMod = tmpUni Mod 10
'   Calcula o resto da dezena
    tmpModDez = tmpDez Mod 10
'   Se centena for cem, definir string como "cem " e sair
    If centena = 100 Then
        centoString = "cem "
    Else
'   Caso contrário definir a string da centena
        centoString = cento(tmpCento)
    End If
'   Avalia se a unidade é maior ou igual a zero, se o resto da unidade é igual ou
'   maior que zero, se a dezena é maior ou igual a um e se a centena é igual ou
'   maior que 1. Se forem verdadeiros; entao, adicionar " e " a string da centena
    If (tmpUni >= 0 And tmpUniMod >= 0 And tmpDez >= 1 And tmpCento >= 1) Then
        centoString = centoString & " e "
    End If
'   Concatena a string do cento com a string da dezena
    centenas = Trim(centoString & dezenas(tmpDez))
End Function
Private Function milhares(milhar As Double) As String
    Dim tmpMilhar      As Double
    Dim tmpCento       As Double
    Dim milString      As String

'   Calcula o inteiro da milhar
    tmpMilhar = Int(milhar / 1000)
'   Calcula o cento dentro da milhar
    tmpCento = milhar - (tmpMilhar * 1000)
'   Se milhar for zero, entao a string da milhar fica em branco
    If tmpMilhar = 0 Then milString = ""
'   Se for igual a 1, entao
 '   If '(tmpMilhar = 1) Then
'       string da milhar é igual a unidade e "mil"
        'milString = unidades(tmpMilhar) & "um mil "
'       se maior que 1 e menor que dez, string igual a unidades
    If (tmpMilhar >= 1 And tmpMilhar < 10) Then
            milString = unidades(tmpMilhar) & " Mil, "
'           Se for entre 10 e 100, entao string igual a dezenas
            ElseIf (tmpMilhar >= 10 And tmpMilhar < 100) Then
                milString = dezenas(tmpMilhar) & " Mil, "
'               Se for entre 100 e 1000, entao igual string centenas
                ElseIf (tmpMilhar >= 100 And tmpMilhar < 1000) Then
                    milString = centenas(tmpMilhar) & " Mil, "
    End If
    'If tmpCento = 1 Then milString = " e "
    If (tmpCento >= 1 And tmpCento <= 100) Then milString = milString & "e "
    milhares = Trim(milString & centenas(tmpCento))
End Function
Private Function milhoes(milhao As Double) As String
'   Ver comentários para milhares acima
    Dim tmpMilhao      As Double
    Dim tmpMilhares    As Double
    Dim miString       As String
    
    tmpMilhao = Int(milhao / 1000000)
    tmpMilhares = milhao - (tmpMilhao * 1000000)
    If tmpMilhao = 0 Then miString = ""
    If (tmpMilhao = 1) Then
        miString = unidades(tmpMilhao) & " Milhão, "
        ElseIf (tmpMilhao > 1 And tmpMilhao < 10) Then
            miString = unidades(tmpMilhao) & " milhões, "
            ElseIf (tmpMilhao >= 10 And tmpMilhao < 100) Then
                miString = dezenas(tmpMilhao) & " Milhões, "
                ElseIf (tmpMilhao >= 100 And tmpMilhao < 1000) Then
                    miString = centenas(tmpMilhao) & " Milhões, "
    End If
    If milhao = 1000000# Then miString = "Um Milhão de "
    milhoes = Trim(miString & milhares(tmpMilhares))
End Function
Private Function bilhoes(bilhao As Double) As String
'   Ver comentários para milhares acima
    Dim tmpBilhao     As Double
    Dim tmpMilhao       As Double
    'Dim tmpMilhoes      As Double
    Dim biString       As String

    tmpBilhao = Int(bilhao / 1000000000)
    tmpMilhao = bilhao - (tmpBilhao * 1000000000)
    If (tmpBilhao = 1) Then
        biString = unidades(tmpBilhao) & " Bilhão, "
        ElseIf (tmpBilhao > 1 And tmpBilhao < 10) Then
            biString = unidades(tmpBilhao) & " Bilhões, "
            ElseIf (tmpBilhao >= 10 And tmpBilhao < 100) Then
                biString = dezenas(tmpBilhao) & " Bilhões, "
                ElseIf (tmpBilhao >= 100 And tmpBilhao < 1000) Then
                    biString = centenas(tmpBilhao) & " Bilhões, "
    End If
    If bilhao = 1000000000# Then biString = "Um Bilhão de "
    bilhoes = Trim(biString & milhoes(tmpMilhao))
End Function
Private Function Trilhoes(Trilhao As Double) As String
'   Ver comentários para milhares acima
    Dim tmpTrilhao     As Double
    Dim tmpBilhao       As Double
    Dim triString       As String

    tmpTrilhao = Int(Trilhao / 1000000000000#)
    tmpBilhao = Trilhao - (tmpTrilhao * 1000000000000#)
    If (tmpTrilhao = 1) Then
        triString = unidades(tmpTrilhao) & " Trilhão, "
        ElseIf (tmpTrilhao > 1 And tmpTrilhao < 10) Then
            triString = unidades(tmpTrilhao) & " Trilhões, "
            ElseIf (tmpTrilhao >= 10 And tmpTrilhao < 100) Then
                triString = dezenas(tmpTrilhao) & " Trilhões, "
                ElseIf (tmpTrilhao >= 100 And tmpTrilhao < 1000) Then
                    triString = centenas(tmpTrilhao) & " Trilhões, "
    End If
    If Trilhao = 1000000000000# Then triString = "Um Trilhão de "
    Trilhoes = Trim(triString & bilhoes(tmpBilhao))
End Function
Function arredBaixo(valor)
    Dim tmpValor
    tmpValor = Round(CDbl(Right(Round(valor, 2) * 100, 2)) / 100, 2)
    arredBaixo = Round(Round(valor, 2) - tmpValor, 0)
End Function

Este código define a Macro ValorPorExtenso que iremos usar para escrever valores por extenso.

Agora retorne à planilha Excel e expanda a célula A1 onde iremos digitar os valores numéricos. Expanda a célula B1 onde os valores por extenso serão escritos e selecione a célula B1 e clique no ícone fx;

A seguir na janela – Inserir função – selecione a opção – Definida pelo usuário – e escolha a macro ValorPorExtenso;

Na caixa argumentos da função informe a célula onde os valores numéricos serão digitados. No nosso exemplo a célula A1 e clique em OK;

Pronto! Basta digitar um valor numérico na célula A1 que o valor por extenso será escrito na célula B1, conforme vemos a seguir:

Agora basta salva sua planilha, quando salvar possivelmente você vai receber a mensagem abaixo, se isso ocorrer clique em não.

Altere o tipo de arquivo para “Pasta de Trabalho Habilitada para Macro do Excel(*.xlsm)” e clique em salvar.

Lembre-se que ao abrir essa planilha você deve clicar em Habilitar Conteúdo para poder usar a macro.

Gostou? Se tiverem algumas sugestões, dica ou se ficou com alguma dúvida sobre este tutorial, não tem problema! Basta comentar no post que iremos responder suas dúvidas assim que for possível.

Fonte: macoratti, support.microsoft.com, code-library.github