Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Soluarvojen Lukeminen ja Kirjoittaminen | Työskentely Excel-tietojen Kanssa
Excel VBA Liiketoiminnan Automaatioon

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
Kuva.3.1

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ä

  1. Kirjoita Sub, joka lukee tilauksen ORD1003 Customer- ja Total-arvot kahteen muuttujaan ja näyttää ne MsgBox-ikkunassa.
  2. Muuta ORD1002:n Status-arvoksi "Shipped" käyttämällä Cells(rivi, sarake) -rakennetta Range:n sijaan.
  3. Aseta NumberFormat = "$#,##0.00" Unit Price- ja Total-sarakkeille sekä "0%" Discount % -sarakkeelle.
Vihje
expand arrow

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 .Value vastaavaan muuttujaan.
  • Yhdistä molemmat muuttujat yhdeksi viestiksi &-operaattorilla ennen kuin viet ne MsgBox-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

  • NumberFormat asetetaan alueelle samalla tavalla kuin yksittäiselle solulle — käytät sitä alueille F2:F6, H2:H6 ja G2: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.
Ratkaisu
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
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 3. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 3. Luku 1
some-alt