Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Lettura e scrittura dei valori delle celle | Lavorare con i dati di Excel
Excel VBA per l'Automazione Aziendale

Lettura e scrittura dei valori delle celle

Scorri per mostrare il menu

La funzione più basilare di VBA è leggere e scrivere il valore di una cella:

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(riga, colonna) svolge la stessa funzione ma utilizza numeri invece di lettere — particolarmente utile quando si utilizzano cicli, poiché una variabile di ciclo è un numero, non una lettera:

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

Sembrano intercambiabili, ma non lo sono:

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

Usa .Value quando desideri solo il numero. Usa .Formula quando inserisci una formula in una cella — ad esempio, per costruire la colonna Totale in modo programmatico invece di digitarla una volta e copiarla:

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

NumberFormat

Controlla come viene visualizzato un valore senza modificarne il numero sottostante:

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

Questo aspetto è più importante di quanto sembri — una cella può contenere 0.1 e visualizzare "10%" allo stesso tempo, e solo NumberFormat controlla questa seconda parte.

Attività

  1. Scrivere una Sub che legga il Cliente e il Totale dell'Ordine ORD1003 in due variabili e li visualizzi in un MsgBox.
  2. Modificare lo Status di ORD1002 in "Shipped" utilizzando Cells(riga, colonna) invece di Range.
  3. Applicare NumberFormat = "$#,##0.00" alle colonne Unit Price e Total, e "0%" alla colonna Discount %.
Suggerimento
expand arrow

1. Lettura del Cliente e del Totale di ORD1003

  • Per prima cosa, individua in quale riga si trova ORD1003 — conta verso il basso nella tabella dai dati iniziali del Capitolo 3: ORD1001 è nella riga 2, quindi ORD1003 è due righe più in basso.
  • Cliente e Totale sono due colonne diverse — conta attraverso la riga dell'intestazione (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) per trovare la lettera di ciascuna.
  • Dichiara una variabile per il nome del cliente (String) e una per il totale (Double), fai riferimento esplicito al foglio come spiegato nel Capitolo 3 (ThisWorkbook.Worksheets("Orders")), e leggi ciascuna cella con .Value nella variabile corrispondente.
  • Unisci entrambe le variabili in un unico messaggio con & prima di passarle a MsgBox — hai già utilizzato questo schema nel Capitolo 2.

2. Modifica dello Status di ORD1002 con Cells(row, column)

  • Cells(row, column) accetta solo numeri, non lettere — sai già in quale riga si trova ORD1002 dalla tabella; per la colonna, conta semplicemente la posizione invece di digitare una lettera (Status è l'ultima delle nove colonne).
  • Si tratta di un'assegnazione diretta: .Cells(row, column).Value = "Shipped", non è necessario leggere nulla prima.

3. Applicazione di NumberFormat a tre colonne

  • NumberFormat si imposta allo stesso modo sia per un intervallo che per una singola cella — basta applicarlo a F2:F6, H2:H6 e G2:G6 (controlla bene quale lettera corrisponde a Unit Price, Total e Discount % prima di scriverle).
  • Ogni colonna ha la sua riga dedicata, poiché Unit Price/Total richiedono la formattazione valuta e Discount % quella percentuale — non cercare di applicare entrambi i formati in un'unica riga.
  • Fare riferimento all'intervallo tramite la stessa variabile ws già impostata mantiene tutte e tre le righe brevi e coerenti.
Soluzione
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
Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 1

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 1
some-alt