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
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à
- Scrivere una
Subche legga il Cliente e il Totale dell'Ordine ORD1003 in due variabili e li visualizzi in unMsgBox. - Modificare lo Status di ORD1002 in "Shipped" utilizzando Cells(riga, colonna) invece di Range.
- Applicare
NumberFormat = "$#,##0.00"alle colonne Unit Price e Total, e "0%" alla colonna Discount %.
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.Valuenella variabile corrispondente. - Unisci entrambe le variabili in un unico messaggio con
&prima di passarle aMsgBox— 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
NumberFormatsi imposta allo stesso modo sia per un intervallo che per una singola cella — basta applicarlo aF2:F6,H2:H6eG2: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
wsgià impostata mantiene tutte e tre le righe brevi e coerenti.
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
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione