Soluarvojen Lukeminen ja Kirjoittaminen
Pyyhkäise näyttääksesi valikon
Perustoiminto VBA:ssa on solun arvon lukeminen ja kirjoittaminen:
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) tekee saman numeroin kuin kirjaimin — erityisen hyödyllistä silmukoissa, koska silmukkamuuttuja on numero, ei kirjain:
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
Nämä näyttävät samanlaisilta, mutta eivät ole:
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
Käytä .Value-ominaisuutta, kun tarvitset vain luvun. Käytä .Formula-ominaisuutta, kun kirjoitat kaavan soluun — esimerkiksi kun luot Total-sarakkeen ohjelmallisesti sen sijaan, että kirjoittaisit sen kerran ja kopioisit:
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
Määrittää, miten arvo näytetään muuttamatta taustalla olevaa lukua:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
Tällä on suurempi merkitys kuin miltä kuulostaa — solu voi sisältää arvon 0.1 ja näyttää samalla "10%", ja vain NumberFormat määrittää tämän toisen osan.
Tehtävä
- Kirjoita
Sub, joka lukee tilauksen ORD1003 Customer- ja Total-arvot kahteen muuttujaan ja näyttää neMsgBox-ikkunassa. - Muuta ORD1002:n Status-arvoksi "Shipped" käyttämällä Cells(rivi, sarake) -rakennetta Range:n sijaan.
- Aseta
NumberFormat = "$#,##0.00"Unit Price- ja Total-sarakkeille sekä "0%" Discount % -sarakkeelle.
1. ORD1003:n Customer- ja Total-arvojen lukeminen
- Selvitä ensin, millä rivillä ORD1003 sijaitsee — laske taulukosta alas luvusta 3: ORD1001 on rivillä 2, joten ORD1003 on kaksi riviä alempana.
- Customer ja Total ovat eri sarakkeissa — laske otsikkoriviltä (Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status) kummankin sarakkeen kirjain.
- Määrittele yksi muuttuja asiakasnimelle (
String) ja toinen summalle (Double), viittaa taulukkoon eksplisiittisesti kuten luvussa 3 (ThisWorkbook.Worksheets("Orders")), ja lue kummankin solun.Valuevastaavaan muuttujaan. - Yhdistä molemmat muuttujat yhdeksi viestiksi
&-operaattorilla ennen kuin viet neMsgBox-ikkunaan — käytit tätä samaa mallia jo luvussa 2.
2. ORD1002:n Status-arvon muuttaminen Cells(row, column) -rakenteella
Cells(row, column)käyttää pelkkiä numeroita, ei kirjaimia — tiedät jo, millä rivillä ORD1002 on taulukossa; sarakkeen kohdalla laske järjestysnumero, älä kirjoita kirjainta (Status on yhdeksäs sarake).- Tämä on suora sijoitus:
.Cells(row, column).Value = "Shipped", mitään ei tarvitse lukea ensin.
3. NumberFormat-muotoilun asettaminen kolmelle sarakkeelle
NumberFormatasetetaan alueelle samalla tavalla kuin yksittäiselle solulle — käytät sitä alueilleF2:F6,H2:H6jaG2:G6(tarkista vielä, mikä kirjain kuuluu Unit Price-, Total- ja Discount %-sarakkeille ennen kirjoittamista).- Jokainen sarake saa oman rivinsä, koska Unit Price/Total tarvitsevat valuuttamuotoilun ja Discount % prosenttimuotoilun — älä yritä yhdistää muotoiluja yhdelle riville.
- Viittaa alueisiin samalla
ws-muuttujalla, jonka olet jo määritellyt, jotta kaikki kolme riviä pysyvät lyhyinä ja johdonmukaisina.
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
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme