Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Leitura e Escrita de Valores de Células | Trabalhando com Dados do Excel
VBA do Excel para Automação Empresarial

Leitura e Escrita de Valores de Células

Deslize para mostrar o menu

A principal função do VBA é ler e escrever o Valor de uma célula:

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
 
Debug.Print ws.Range("C2").Value      ' Acme Corp
ws.Range("I2").Value = "Shipped"      ' overwrite the Status cell

Cells(row, column) faz a mesma coisa usando números em vez de letras — especialmente útil ao utilizar loops, pois a variável do loop é um número, não uma letra:

Debug.Print ws.Cells(2, 3).Value      ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped"      ' same as Range("I2")

Value vs. Formula vs. Formula2

Parecem intercambiáveis, mas não são:

ws.Range("H2").Value                  ' returns the calculated result: 202.5
ws.Range("H2").Formula                ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2               ' like Formula, but supports newer dynamic-array functions
Figura.3.1

Use .Value quando você deseja apenas o número. Use .Formula ao inserir uma fórmula em uma célula — por exemplo, para construir a coluna Total programaticamente em vez de digitá-la uma vez e copiá-la:

ws.Range("H2").Formula = "=E2*F2*(1-G2)"

NumberFormat

Controla como um valor é exibido sem alterar o número subjacente:

ws.Range("F2:F6").NumberFormat = "$#,##0.00"     ' currency
ws.Range("G2:G6").NumberFormat = "0%"              ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy"      ' date

Isso é mais importante do que parece — uma célula pode conter 0.1 e exibir "10%" ao mesmo tempo, e apenas NumberFormat controla essa segunda parte.

Tarefa

  1. Escrever um Sub que leia o Cliente e o Total do Pedido ORD1003 em duas variáveis e os exiba em um MsgBox.
  2. Alterar o Status do ORD1002 para "Shipped" usando Cells(linha, coluna) em vez de Range.
  3. Aplicar NumberFormat = "$#,##0.00" às colunas Unit Price e Total, e "0%" à coluna Discount %.
Dica
expand arrow

1. Lendo o Cliente e o Total do ORD1003

  • Primeiro, descubra em qual linha está o ORD1003 — conte para baixo na tabela a partir dos dados iniciais do Capítulo 3: ORD1001 está na linha 2, então ORD1003 está duas linhas abaixo.
  • Cliente e Total estão em colunas diferentes — conte na linha do cabeçalho (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) para encontrar a letra de cada uma.
  • Declare uma variável para o nome do cliente (String) e outra para o total (Double), referencie a planilha explicitamente conforme ensinado no Capítulo 3 (ThisWorkbook.Worksheets("Orders")), e leia o .Value de cada célula para sua respectiva variável.
  • Una as duas variáveis em uma mensagem com & antes de passá-las ao MsgBox — esse padrão já foi utilizado no Capítulo 2.

2. Alterando o Status do ORD1002 com Cells(linha, coluna)

  • Cells(row, column) utiliza números simples, não letras — você já sabe em qual linha está o ORD1002 pela tabela; para a coluna, apenas conte a posição em vez de digitar uma letra (Status é a última das nove colunas).
  • É uma atribuição direta: .Cells(row, column).Value = "Shipped", não é necessário ler nada antes.

3. Aplicando NumberFormat em três colunas

  • NumberFormat é definido da mesma forma para um intervalo quanto para uma célula — basta aplicar em F2:F6, H2:H6 e G2:G6 (confira qual letra corresponde a Unit Price, Total e Discount % antes de digitar).
  • Cada coluna recebe uma linha própria, pois Unit Price/Total precisam de formatação de moeda e Discount % de formatação percentual — não tente aplicar ambos os formatos em uma linha só.
  • Referenciar o intervalo usando a mesma variável ws já definida mantém todas as linhas curtas e consistentes.
Solução
expand arrow
Sub ExploreOrdersData()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Orders")

    ' --- 1. Read ORD1003's Customer and Total ---
    Dim customerName As String
    Dim orderTotal As Double

    customerName = ws.Range("C4").Value
    orderTotal = ws.Range("H4").Value

    MsgBox "Customer: " & customerName & " | Total: " & orderTotal

    ' --- 2. Change ORD1002's Status using Cells(row, column) ---
    ws.Cells(3, 9).Value = "Shipped"

    ' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
    ws.Range("F2:F6").NumberFormat = "$#,##0.00"   ' Unit Price
    ws.Range("H2:H6").NumberFormat = "$#,##0.00"   ' Total
    ws.Range("G2:G6").NumberFormat = "0%"           ' Discount %
End Sub
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 3. Capítulo 1
some-alt