quarta-feira, 10 de setembro de 2025

📊 SQL no Excel – Post 1: Seu Primeiro SELECT no Excel

 👋 Bem-vindo(a) ao primeiro post da nossa série de SQL no Excel.

Se você nunca usou SQL antes, não se preocupe: vamos aprender juntos, passo a passo, com projetos práticos que você poderá aplicar direto no Excel.

Hoje vamos criar nosso primeiro projeto em SQL dentro do Excel, aprendendo o comando mais básico e essencial: SELECT.


🎯 Projeto do Dia: Listando Clientes com SQL no Excel

1. Cenário

Imagine que você tem uma planilha no Excel chamada Clientes.xlsx, com a seguinte tabela:

IDNomeCidadeIdade
1João SilvaSão Paulo32
2Maria SouzaRio de Janeiro27
3Carlos LimaBelo Horizonte41
4Ana SantosCuritiba36

Nosso objetivo é listar todos os clientes da planilha usando SQL dentro do Excel.


2. Como preparar o ambiente

👉 Antes de rodar SQL no Excel, precisamos conectar a planilha como se fosse um banco de dados:

  1. Abra o Excel.

  2. Pressione ALT + F11 para abrir o Editor do VBA.

  3. No menu, clique em Inserir → Módulo.

  4. Cole o código abaixo.


3. Código VBA com SQL

Sub ListarClientes() ' Declaração de variáveis Dim conn As Object Dim rs As Object Dim strSQL As String Dim ws As Worksheet ' Criar conexão com o Excel como banco de dados Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' Caminho do arquivo Excel (ajuste para o seu arquivo) conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";" ' Escrevendo a SQL para buscar todos os registros strSQL = "SELECT * FROM [Clientes$]" ' Executando a consulta rs.Open strSQL, conn ' Criando uma nova aba para o resultado Set ws = ThisWorkbook.Sheets.Add ws.Name = "Resultado_SQL" ' Copiando o resultado para a aba nova ws.Range("A1").CopyFromRecordset rs ' Fechando conexões rs.Close conn.Close MsgBox "Consulta concluída com sucesso!", vbInformation End Sub

4. Explicando o Código (linha por linha) 📝

  1. Dim conn As Object → cria a conexão com o Excel.

  2. Dim rs As Object → cria o recordset, que guarda o resultado da consulta.

  3. conn.Open ... → conecta o Excel como se fosse um banco de dados.

  4. strSQL = "SELECT * FROM [Clientes$]" → aqui está a SQL! O SELECT * significa "selecione todas as colunas da tabela Clientes".

  5. rs.Open strSQL, conn → executa a consulta.

  6. ws.Range("A1").CopyFromRecordset rs → joga os dados retornados para uma nova aba no Excel.

  7. MsgBox → apenas mostra uma mensagem de sucesso.


5. Resultado esperado 📋

Depois de rodar a macro ListarClientes, você terá uma nova aba chamada Resultado_SQL, com a mesma lista de clientes que estava na planilha original.

Ou seja, seu primeiro SELECT no Excel via SQL foi executado com sucesso! 🚀


📌 O que você aprendeu hoje?

✅ Como usar SQL dentro do Excel.
✅ Como funciona o comando SELECT *.
✅ Como rodar uma consulta simples e trazer todos os dados de uma planilha.


👉 No próximo post, vamos aprender a filtrar registros usando o WHERE – por exemplo, listar apenas clientes de uma cidade específica.


📢 Precisa de ajuda contábil?

Sou contador especializado em profissionais de serviços. Posso ajudar você com:
✅ Abertura e registro de empresas no Simples Nacional
✅ Acompanhamento mensal da contabilidade
✅ Planejamento tributário para pagar menos impostos

💼 Entre em contato e simplifique sua vida financeira!

📧💸 Automação em Python: Assistente Inteligente de E-mails de Cobrança 📧💸

Resumo rápido: um script em Python que lê uma planilha com clientes, gera faturas em PDF, envia e-mails personalizados via Outlook e registra tudo num log. Ideal para reduzir tempo com cobranças e manter histórico para auditoria.


Por que isso ajuda sua empresa? 🤔

  • Evita retrabalho manual (copiar/colar e-mails).

  • Mantém linguagem padronizada e profissional.

  • Gera prova de envio (PDF + log).

  • Ajuda a acelerar recebimentos e reduzir inadimplência.


O que você precisa ter antes de rodar 🛠️

  1. Windows com Microsoft Outlook instalado (automatização usa Outlook).

  2. Python 3.8+ instalado.

  3. Bibliotecas: pandas, openpyxl, pywin32, fpdf.
    Instale com:

    pip install pandas openpyxl pywin32 fpdf
  4. Uma planilha Excel (clientes.xlsx) com estas colunas (exatas):
    Cliente | Email | Valor | Vencimento | Pago
    Exemplo:

    ClienteEmailValorVencimentoPago
    Acme Ltdacliente@acme.com1500.02025-08-10Não
    Bento SAfinanceiro@bento.br320.52025-09-01Sim

Código completo (salve como assistente_cobranca.py) 💻

# assistente_cobranca.py import os # 1 import pandas as pd # 2 import win32com.client as win32 # 3 from datetime import datetime # 4 from fpdf import FPDF # 5 import unicodedata # 6 # Configurações EXCEL_INPUT = "clientes.xlsx" # 7 LOG_FILE = "log_cobrancas.xlsx" # 8 PASTA_FATURAS = "faturas" # 9 os.makedirs(PASTA_FATURAS, exist_ok=True) # 10 def nome_arquivo_seguro(texto): # 11 nf = unicodedata.normalize('NFKD', texto).encode('ASCII', 'ignore').decode() # 12 nf = "".join(c for c in nf if c.isalnum() or c in (' ', '-', '_')).strip() # 13 nf = nf.replace(" ", "_") # 14 return nf.lower() + ".pdf" # 15 def gerar_pdf(cliente, valor, vencimento, pasta=PASTA_FATURAS): # 16 nome = nome_arquivo_seguro(f"fatura_{cliente}") # 17 caminho = os.path.join(pasta, nome) # 18 pdf = FPDF() # 19 pdf.add_page() # 20 pdf.set_font("Arial", size=12) # 21 pdf.cell(0, 10, txt=f"Fatura - {cliente}", ln=1, align="C") # 22 pdf.ln(5) # 23 pdf.cell(0, 10, txt=f"Valor: R$ {valor:,.2f}", ln=1) # 24 pdf.cell(0, 10, txt=f"Vencimento: {vencimento.strftime('%d/%m/%Y')}", ln=1)# 25 pdf.output(caminho) # 26 return caminho # 27 def enviar_emails(): # 28 df = pd.read_excel(EXCEL_INPUT, engine="openpyxl") # 29 outlook = win32.Dispatch("Outlook.Application") # 30 enviados = [] # 31 for idx, row in df.iterrows(): # 32 cliente = str(row.get("Cliente", "")).strip() # 33 email = str(row.get("Email", "")).strip() # 34 valor = float(row.get("Valor", 0)) # 35 venc = pd.to_datetime(row.get("Vencimento")) # 36 pago = str(row.get("Pago", "")).strip().lower() # 37 dias_atraso = (datetime.now() - venc.to_pydatetime()).days # 38 if not email or pago in ("sim", "s", "yes", "true"): # 39 continue # 40 if dias_atraso <= 0: # 41 continue # 42 if dias_atraso < 10: # 43 mensagem = f"Olá {cliente},\n\nSua fatura venceu em {venc:%d/%m/%Y}. Pode regularizar, por favor?\n\nObrigado!" # 44 elif dias_atraso < 30: # 45 mensagem = f"Olá {cliente},\n\nSua fatura de R$ {valor:,.2f} está em aberto há {dias_atraso} dias. Precisamos regularizar.\n\nAtt." # 46 else: # 47 mensagem = f"Atenção {cliente},\n\nSua fatura está vencida há {dias_atraso} dias. Entre em contato para evitar medidas.\n\nAt.te." # 48 fatura = gerar_pdf(cliente, valor, venc) # 49 mail = outlook.CreateItem(0) # 50 mail.To = email # 51 mail.Subject = f"Cobrança - {cliente} - R$ {valor:,.2f}" # 52 mail.Body = mensagem # 53 mail.Attachments.Add(os.path.abspath(fatura)) # 54 try: mail.Send() # 55 enviados.append({"Cliente": cliente, "Email": email, "Valor": valor, "Vencimento": venc, "DiasAtraso": dias_atraso, "Fatura": fatura, "EnviadoEm": datetime.now()}) # 56 print(f"E-mail enviado para {cliente} -> {email}") # 57 except Exception as e: print(f"Falha ao enviar para {cliente}: {e}") # 58 if enviados: # 59 df_log = pd.DataFrame(enviados) # 60 if os.path.exists(LOG_FILE): # 61 df_antigo = pd.read_excel(LOG_FILE, engine="openpyxl") # 62 df_novo = pd.concat([df_antigo, df_log], ignore_index=True) # 63 df_novo.to_excel(LOG_FILE, index=False) # 64 else: df_log.to_excel(LOG_FILE, index=False) # 65 if __name__ == "__main__": # 66 enviar_emails() # 67

Explicação linha por linha (linguagem simples) 🧾🔍

Vou explicar cada linha numerada acima. Se preferir, copie o código e acompanhe.

1 import os

  • Importa o módulo que ajuda a trabalhar com pastas e arquivos (criar pasta, juntar caminhos).

2 import pandas as pd

  • Importa o pandas, usado para ler e escrever planilhas Excel e manipular tabelas de dados.

3 import win32com.client as win32

  • Importa a biblioteca que permite controlar o Outlook no Windows (enviar e-mails automaticamente).

4 from datetime import datetime

  • Traz a classe datetime para calcular datas e horas (ex.: quantos dias de atraso).

5 from fpdf import FPDF

  • Importa o gerador de PDF simples, usado para criar a fatura em PDF.

6 import unicodedata

  • Usado para “limpar” nomes (tirar acentos) e gerar nomes de arquivos seguros.

7 EXCEL_INPUT = "clientes.xlsx"

  • Nome do arquivo Excel que o script vai ler (coloque sua planilha com este nome ou altere aqui).

8 LOG_FILE = "log_cobrancas.xlsx"

  • Nome do arquivo onde vamos guardar o registro dos e-mails enviados.

9 PASTA_FATURAS = "faturas"

  • Pasta onde os PDFs das faturas serão salvos.

10 os.makedirs(PASTA_FATURAS, exist_ok=True)

  • Cria a pasta faturas se ela não existir (não dá erro se já existir).

11 def nome_arquivo_seguro(texto):

  • Início de uma função que transforma texto (nome do cliente) em nome de arquivo seguro.

12 nf = unicodedata.normalize('NFKD', texto).encode('ASCII', 'ignore').decode()

  • Remove acentos e caracteres especiais (transforma 'José' em 'Jose').

13 nf = "".join(c for c in nf if c.isalnum() or c in (' ', '-', '_')).strip()

  • Mantém só letras, números, espaços, traço e underline — elimina outros símbolos.

14 nf = nf.replace(" ", "_")

  • Substitui espaços por underscore para formar nomes de arquivo amigáveis.

15 return nf.lower() + ".pdf"

  • Retorna o nome final em minúsculas com extensão .pdf.

16 def gerar_pdf(cliente, valor, vencimento, pasta=PASTA_FATURAS):

  • Inicia a função que cria o PDF da fatura para um cliente.

17 nome = nome_arquivo_seguro(f"fatura_{cliente}")

  • Cria um nome seguro para o PDF, usando o nome do cliente.

18 caminho = os.path.join(pasta, nome)

  • Monta o caminho completo do arquivo (pasta + nome do arquivo).

19 pdf = FPDF()

  • Cria um objeto PDF vazio para começar a escrever.

20 pdf.add_page()

  • Adiciona a primeira página ao PDF.

21 pdf.set_font("Arial", size=12)

  • Define a fonte (tipo e tamanho) para escrever no PDF.

22 pdf.cell(0, 10, txt=f"Fatura - {cliente}", ln=1, align="C")

  • Escreve o título da fatura (centralizado).

23 pdf.ln(5)

  • Pula uma linha para dar espaço.

24 pdf.cell(0, 10, txt=f"Valor: R$ {valor:,.2f}", ln=1)

  • Escreve o valor formatado com duas casas decimais.

25 pdf.cell(0, 10, txt=f"Vencimento: {vencimento.strftime('%d/%m/%Y')}", ln=1)

  • Escreve a data de vencimento no formato dia/mês/ano.

26 pdf.output(caminho)

  • Salva o arquivo PDF no disco no caminho criado.

27 return caminho

  • Retorna o caminho do PDF gerado (para anexar no e-mail).

28 def enviar_emails():

  • Início da função principal que faz a leitura da planilha, gera PDFs e envia e-mails.

29 df = pd.read_excel(EXCEL_INPUT, engine="openpyxl")

  • Lê a planilha clientes.xlsx para uma tabela (df = data frame).

30 outlook = win32.Dispatch("Outlook.Application")

  • Conecta ao Outlook para poder criar e enviar e-mails.

31 enviados = []

  • Lista vazia para registrar (na memória) os envios bem sucedidos.

32 for idx, row in df.iterrows():

  • Começa a percorrer cada linha da planilha (cada cliente).

33 cliente = str(row.get("Cliente", "")).strip()

  • Pega o nome do cliente da linha; transforma em texto e limpa espaços extras.

34 email = str(row.get("Email", "")).strip()

  • Pega o e-mail do cliente.

35 valor = float(row.get("Valor", 0))

  • Lê o valor (número) da fatura; se não tiver, usa 0.

36 venc = pd.to_datetime(row.get("Vencimento"))

  • Converte a data de vencimento para um objeto de data do pandas.

37 pago = str(row.get("Pago", "")).strip().lower()

  • Verifica na coluna "Pago" se a fatura já foi quitada (texto em minúsculo).

38 dias_atraso = (datetime.now() - venc.to_pydatetime()).days

  • Calcula quantos dias se passaram desde o vencimento (dias de atraso).

39 if not email or pago in ("sim", "s", "yes", "true"):

  • Se não tiver e-mail ou se a fatura estiver marcada como paga, pula este cliente.

40 continue

  • Pula para o próximo cliente na planilha.

41 if dias_atraso <= 0:

  • Se não há atraso (vencimento futuro ou hoje), pula também.

42 continue

  • Pula para o próximo registro.

43 if dias_atraso < 10:

  • Se o atraso for menor que 10 dias — mensagem mais suave.

44 mensagem = f"... (texto educado) ..."

  • Define o texto do e-mail para esse caso (você verá no código real).

45 elif dias_atraso < 30:

  • Se atraso entre 10 e 29 dias — mensagem mais direta.

46 mensagem = f"... (texto intermediário) ..."

  • Texto correspondente ao caso.

47 else:

  • Se 30 dias ou mais — mensagem mais firme.

48 mensagem = f"... (texto firme) ..."

  • Texto final para atraso crítico.

49 fatura = gerar_pdf(cliente, valor, venc)

  • Chama a função para criar o PDF da fatura e guarda o caminho do arquivo.

50 mail = outlook.CreateItem(0)

  • Cria uma nova mensagem de e-mail no Outlook.

51 mail.To = email

  • Define o destinatário.

52 mail.Subject = f"Cobrança - {cliente} - R$ {valor:,.2f}"

  • Define o assunto do e-mail (útil para organização).

53 mail.Body = mensagem

  • Coloca o texto no corpo do e-mail.

54 mail.Attachments.Add(os.path.abspath(fatura))

  • Anexa o PDF que acabamos de gerar.

55 mail.Send()

  • Envia o e-mail (pode abrir aviso de segurança no Outlook em alguns PCs).

56 enviados.append({...})

  • Se deu certo, guardamos dados sobre esse envio (cliente, data, arquivo).

57 print(f"E-mail enviado para {cliente} -> {email}")

  • Imprime no terminal que o e-mail foi enviado (útil para acompanhar execução).

58 except Exception as e: / print(f"Falha...")

  • Se der erro no envio, registra na tela qual foi o problema (não para todo o script).

59 if enviados:

  • Depois de terminar a varredura, se houver envios bem sucedidos, vamos gravar no log.

60 df_log = pd.DataFrame(enviados)

  • Converte a lista de envios em uma tabela (para salvar no Excel).

61 if os.path.exists(LOG_FILE):

  • Se o arquivo de log já existe, vamos anexar ao que já tem.

62 df_antigo = pd.read_excel(LOG_FILE, engine="openpyxl")

  • Lê o log antigo.

63 df_novo = pd.concat([df_antigo, df_log], ignore_index=True)

  • Junta o antigo com os novos registros.

64 df_novo.to_excel(LOG_FILE, index=False)

  • Salva tudo de volta no arquivo de log (completo).

65 else: df_log.to_excel(LOG_FILE, index=False)

  • Se não havia log, cria um novo com os envios.

66 if __name__ == "__main__":

  • Padrão Python: se você rodar este arquivo diretamente, executa o que vem a seguir.

67 enviar_emails()

  • Chama a função principal para começar o processo.


Como usar — passo a passo simples ✅

  1. Coloque assistente_cobranca.py e clientes.xlsx na mesma pasta.

  2. Abra o terminal (Prompt) nessa pasta.

  3. Instale dependências: pip install pandas openpyxl pywin32 fpdf

  4. Rode: python assistente_cobranca.py

  5. Observe no terminal as mensagens de sucesso/erro. Verifique a pasta faturas/ e o arquivo log_cobrancas.xlsx.


Dicas importantes e boas práticas ⚠️

  • Teste primeiro com 1 ou 2 e-mails (coloque seu próprio e-mail) antes de rodar em toda base.

  • Outlook pode mostrar um alerta de segurança; algumas empresas bloqueiam automações — consulte o time de TI.

  • Não use para spam: envie apenas cobranças válidas e respeite regras de comunicação.

  • Mantenha backup da planilha original antes de rodar.


Variações e melhorias que você pode pedir depois 🔧

  • Enviar em lotes (por ex. 50 por vez).

  • Integração com SMTP (para quem não usa Outlook).

  • HTML no corpo do e-mail (assinatura com logo).

  • Interface simples em Tkinter para selecionar arquivo e rodar com 1 botão.

  • Agendamento diário (via Agendador de Tarefas do Windows).


Precisa de suporte contábil? 📞 

Sou contador e ajudo profissionais e empresas com:

  • Abertura e registro de empresas no Simples Nacional;

  • Acompanhamento mensal da contabilidade;

  • Tributação e planejamento tributário.

🔢 Post 2 – Sua primeira calculadora em Python! 🧮✨

 Você já aprendeu a mostrar mensagens na tela e até pedir o nome do usuário (Post 1). Agora vamos dar um passo a mais: criar uma calculadora simples que soma dois números.

Sim, já vamos para um projeto útil de verdade 😃.


🐣 Passo a passo do código

# Primeiro pedimos o primeiro número num1 = input("Digite o primeiro número: ") # input() mostra a pergunta e espera o usuário digitar algo no teclado. # O que for digitado será guardado dentro da variável num1. # Importante: por padrão, o input() sempre guarda como texto (string). # Depois pedimos o segundo número num2 = input("Digite o segundo número: ") # Aqui acontece a mesma coisa, o valor digitado vai para a variável num2. # Precisamos converter os valores para números inteiros num1 = int(num1) # int() transforma o valor que estava em formato de texto para número inteiro. num2 = int(num2) # Agora fazemos a soma resultado = num1 + num2 # O símbolo + faz a operação de adição entre os dois números. # Por fim mostramos o resultado na tela print("A soma é:", resultado) # print() exibe a frase "A soma é:" seguida do valor guardado na variável resultado.

💻 Exemplo de saída

Digite o primeiro número: 5 Digite o segundo número: 7 A soma é: 12

📌 O que você aprendeu hoje?

  • input() sempre guarda valores como texto (string).

  • Usamos int() para transformar texto em número inteiro.

  • Guardamos valores em variáveis (num1, num2, resultado).

  • Fizemos uma operação matemática real com Python! 🎉


🎯 Desafio extra

Tente modificar o código para fazer subtração (-), multiplicação (*) e divisão (/).
👉 Dica: basta trocar o sinal + pelo operador desejado.


⏭️ O que vem por aí?

No próximo post, vamos transformar essa calculadora em algo ainda mais poderoso: uma Calculadora de Quatro Operações, onde o usuário escolhe se quer somar, subtrair, multiplicar ou dividir! 🔥


💬 E aí, conseguiu somar seus primeiros números em Python?

🛰️ Automação em VBA: Scanner de Disponibilidade de Arquivos em Rede

 🧐 O Problema

Em ambientes empresariais:

  • Existem planilhas críticas salvas em pastas de rede.

  • Muitas vezes alguém tenta abrir e… ❌ “Arquivo não encontrado” ou “Rede indisponível”.

  • Não existe uma forma rápida de o próprio Excel testar se os arquivos estão acessíveis antes de usá-los em macros ou relatórios.


💡 A Solução

Criar uma automação em VBA que funciona como um scanner de arquivos de rede:

  • Lê uma lista de caminhos de arquivos (armazenada em uma aba chamada "MapeamentoRede").

  • Testa se cada arquivo realmente existe na rede.

  • Retorna em uma aba "StatusRede" com:

    • 📂 Caminho do arquivo

    • ✅ Disponível ou ❌ Não encontrado

    • ⏱️ Data/hora do último teste

Isso transforma o Excel em um validador de links de rede corporativa.


🚀 Como Funciona

  1. Na aba "MapeamentoRede", o usuário lista os arquivos da rede que deseja monitorar.
    Exemplo:

    Caminho do Arquivo
    \Servidor01\Financeiro\Vendas.xlsx
    \Servidor02\RH\Folha.xlsx
    \Servidor03\TI\Inventário.xlsx
  2. Executa a macro.

  3. Na aba "StatusRede", o VBA preenche automaticamente o resultado da checagem.


🧑‍💻 Código VBA

Sub ScannerArquivosRede() Dim wsMap As Worksheet, wsStatus As Worksheet Dim ultimaLinha As Long, i As Long Dim caminho As String, existe As Boolean ' Define as planilhas Set wsMap = ThisWorkbook.Sheets("MapeamentoRede") ' Cria/limpa a aba de status On Error Resume Next Set wsStatus = ThisWorkbook.Sheets("StatusRede") If wsStatus Is Nothing Then Set wsStatus = Sheets.Add wsStatus.Name = "StatusRede" End If wsStatus.Cells.Clear On Error GoTo 0 ' Cabeçalho wsStatus.Range("A1:C1").Value = Array("Caminho do Arquivo", "Status", "Última Verificação") ' Última linha na aba de mapeamento ultimaLinha = wsMap.Cells(wsMap.Rows.Count, 1).End(xlUp).Row ' Varre cada caminho listado For i = 2 To ultimaLinha caminho = wsMap.Cells(i, 1).Value If Dir(caminho) <> "" Then wsStatus.Cells(i, 1).Value = caminho wsStatus.Cells(i, 2).Value = "✅ Disponível" Else wsStatus.Cells(i, 1).Value = caminho wsStatus.Cells(i, 2).Value = "❌ Não encontrado" End If wsStatus.Cells(i, 3).Value = Now Next i MsgBox "🔎 Verificação concluída! Veja a aba 'StatusRede'.", vbInformation End Sub

📊 Exemplo de saída (StatusRede)

Caminho do ArquivoStatusÚltima Verificação
\Servidor01\Financeiro\Vendas.xlsx✅ Disponível06/09/2025 10:30:15
\Servidor02\RH\Folha.xlsx❌ Não encontrado06/09/2025 10:30:15
\Servidor03\TI\Inventário.xlsx✅ Disponível06/09/2025 10:30:15

🎯 Onde é útil?

✅ Controle de links críticos de relatórios.
✅ Auditoria de acessibilidade em pasta de rede compartilhada.
✅ Evitar erros em macros que dependem de arquivos externos.
✅ Monitoramento de servidores corporativos.


🔥 Por que é útil ?

Pouca gente pensa em usar Excel VBA como um monitor de acessibilidade de arquivos em rede.
Normalmente isso é feito com scripts de TI (PowerShell, Python).
Aqui, qualquer usuário corporativo pode rodar direto do Excel.

📘✨ Excel VBA na Prática: Usando o Método Areas do Objeto Range

Quando trabalhamos no Excel, muitas vezes precisamos lidar com intervalos múltiplos (não contíguos), como quando selecionamos várias células separadas segurando a tecla CTRL.

No VBA, o objeto Range possui o método Areas, que facilita a manipulação desses conjuntos de intervalos. 🚀


🔎 Definição

  • Range.Areas → Retorna uma coleção de áreas (subintervalos) dentro de um intervalo múltiplo.

  • Cada área pode ser acessada individualmente como um objeto Range.


🧑‍💻 Exemplos práticos

1️⃣ Descobrir quantas áreas existem em uma seleção

Sub ContarAreas() Dim TotalAreas As Long TotalAreas = Selection.Areas.Count MsgBox "A seleção possui " & TotalAreas & " áreas diferentes." End Sub

👉 Se você selecionar, por exemplo, A1:A5 e C1:C5, o resultado será 2 áreas.


2️⃣ Trabalhar com cada área separadamente

Sub DestacarAreas() Dim i As Long For i = 1 To Selection.Areas.Count Selection.Areas(i).Interior.Color = vbYellow Next i End Sub

👉 Cada área da seleção será destacada em amarelo.


3️⃣ Usar cada área em cálculos

Sub SomarAreas() Dim i As Long, Soma As Double For i = 1 To Selection.Areas.Count Soma = Soma + WorksheetFunction.Sum(Selection.Areas(i)) Next i MsgBox "A soma total das áreas selecionadas é: " & Soma End Sub

👉 O VBA percorre cada área e calcula o total, somando tudo em uma única saída.


💡 Dica útil na automação:
O método Areas é ideal quando o usuário faz seleções personalizadas no Excel e você precisa percorrer cada conjunto de células para formatar, validar ou calcular valores de forma independente.


🟢📢 Consultoria Contábil Inteligente
💼 Abertura e registro de empresas no Simples Nacional
📊 Acompanhamento contábil e fiscal mensal
⚖️ Planejamento tributário estratégico para pagar só o justo

👉 Entre em contato e mantenha sua empresa organizada com segurança!

terça-feira, 9 de setembro de 2025

🐍 Post 1 – Olá Mundo em Python: a primeira linha do seu futuro! 🚀

Bem-vindo(a) à Série de 100 Projetos em Python para Iniciantes! 🎉

Se você sempre quis aprender programação, mas achava que era coisa de gente com cara de gênio 🤓, respira fundo: você está no lugar certo!

Aqui, cada post será um mini-projeto prático, divertido e direto ao ponto. Ou seja: nada de ficar só na teoria chata 📚. Você vai aprender Python construindo coisas de verdade — desde scripts simples até sistemas completos com banco de dados, automação e até inteligência artificial.

👉 Spoiler: no post 100 você vai ter feito um sistema profissional com interface, relatórios em Excel e PDF, automação de navegador e muito mais.


🐣 O primeiro passo: Olá, Mundo! 🌍

Se você nunca programou, relaxa: todo programador começou do zero, escrevendo a famosa frase mágica “Olá, Mundo!”.

É um ritual de passagem. É como acender a chama olímpica da sua carreira na programação 🔥.

Aqui vai seu primeiro código em Python:

print("Olá, Mundo!") # O comando print() serve para mostrar algo na tela. # O texto entre aspas ("Olá, Mundo!") é o que será exibido.

Saída no console:

Olá, Mundo!

🎯 O que acontece aqui?

  • print() → função que exibe algo na tela.

  • "Olá, Mundo!" → texto (também chamado de string) que você mandou o Python mostrar.


🛠️ Projeto do dia: sua primeira mensagem personalizada

Agora vamos deixar esse programa um pouquinho mais divertido: em vez de mostrar só “Olá, Mundo!”, ele vai perguntar seu nome e dar boas-vindas.

nome = input("Qual é o seu nome? ") # input() pede que o usuário digite alguma coisa. # O texto dentro de aspas ("Qual é o seu nome? ") # é a pergunta que aparece na tela. # O que você digitar será guardado na variável "nome". print("Olá,", nome, "! Bem-vindo(a) ao Python 🚀") # O print() aqui mostra o texto "Olá," seguido do valor que está dentro da variável nome. # Depois junta com a frase final "Bem-vindo(a) ao Python 🚀".

Exemplo de saída:

Qual é o seu nome? José Olá, José ! Bem-vindo(a) ao Python 🚀

✨ Missão cumprida!

Parabéns 🎉, você escreveu seu primeiro programa em Python.

📌 O que você aprendeu hoje:

  • Usar print() para mostrar informações.

  • Usar input() para perguntar algo ao usuário.

  • Guardar o que o usuário digitou dentro de uma variável (nome).


⏭️ O que vem por aí?

No próximo post vamos criar uma calculadora simples 🔢, que vai somar dois números informados por você.


👉 Não esquece de acompanhar a série “100 Projetos em Python” aqui no blog!
Se você seguir passo a passo, vai sair de iniciante absoluto até criar sistemas profissionais.


💬 Me conta nos comentários: conseguiu rodar seu primeiro código?

🧠 Automação em VBA: Detector Automático de Colunas com Unidade de Medida

 🧐 O Problema

Planilhas empresariais muitas vezes misturam valores e unidades de medida:

  • 📦 “100 kg” em vez de só 100.

  • 💰 “R$ 250,00” dentro da célula como texto.

  • ⛽ “35 litros” misturado com o número.

Isso atrapalha somas, filtros e cálculos — porque o Excel não entende que é número + unidade.
Normalmente alguém precisa limpar manualmente antes de usar os dados.


💡 A Solução

Um detector automático de unidades de medida com VBA:

  • Varre todas as células numéricas/textuais.

  • Identifica se há números misturados com texto (ex.: “kg”, “R$”, “L”, “unid”).

  • Separa automaticamente em duas colunas:

    • 🔢 Valor numérico.

    • 🏷️ Unidade de medida.

  • Gera um relatório indicando quais colunas continham misturas.

É como dar ao Excel uma inteligência para higienizar dados sujos de forma automática. 🧼


🚀 Como Funciona

  1. Usuário executa a macro "SepararUnidades".

  2. O VBA percorre cada aba, célula por célula.

  3. Se detectar texto com número + letras, quebra em 2 partes.

  4. Cria novas colunas: Valor e Unidade.


🧑‍💻 Código VBA (conceito simplificado)

Sub SepararUnidades() Dim ws As Worksheet Dim ultimaCol As Long, ultimaLin As Long Dim i As Long, j As Long Dim valor As String, num As String, unidade As String Dim regex As Object, matches As Object Set regex = CreateObject("VBScript.RegExp") regex.Pattern = "([0-9,.]+)\s*([A-Za-z%$]+)" regex.IgnoreCase = True For Each ws In ThisWorkbook.Sheets ultimaCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column ultimaLin = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row For j = 1 To ultimaCol For i = 2 To ultimaLin valor = Trim(ws.Cells(i, j).Value) If regex.Test(valor) Then Set matches = regex.Execute(valor) If matches.Count > 0 Then num = matches(0).SubMatches(0) unidade = matches(0).SubMatches(1) ws.Cells(i, j).Offset(0, 1).Value = num ws.Cells(i, j).Offset(0, 2).Value = unidade End If End If Next i Next j Next ws MsgBox "✅ Separação concluída! Veja colunas ao lado dos dados originais.", vbInformation End Sub

📊 Exemplo prático

OriginalValorUnidade
100 kg100kg
R$250,00250,00R$
35 litros35litros

🎯 Onde é útil?

✅ Estoques (quantidade + unidade: “100 caixas”).
✅ Financeiro (valores com “R$” dentro da célula).
✅ Produção industrial (medidas: “50m”, “120cm”).
✅ Relatórios de consumo (“20L”, “15Kg”).


🔥 Por que é útil ?

Pouca gente imagina criar no Excel um sistema automático para separar unidades de medida.
Esse tipo de tratamento geralmente é feito em softwares de ETL ou bancos de dados — aqui você tem isso direto no Excel com VBA.