Artikkelit

Esimerkkejä VBA:lla kirjoitetuista Excel-makroista

Seuraavat yksinkertaiset Excel-makroesimerkit on kirjoitettu VBA:lla 

Arvioitu lukuaika: 3 minuti

VBA-esimerkki käyttäen Arraya

Seuraava alitoiminto lukee arvoja aktiivisen laskentataulukon sarakkeen A soluista, kunnes se kohtaa tyhjän solun. Arvot tallennetaan taulukkoon. Tämä yksinkertainen Excel-makroesimerkki havainnollistaa seuraavaa käyttöä:

  • Muuttuva ilmoitukset;
  • Dynaamiset taulukot;
  • Sykli Do Until;
  • Katso nykyisen Excel-laskentataulukon solut;
  • VBA-toiminto Ubound buildin (joka palauttaa taulukon korkeimman indeksin).
' Sub procedure store values in Column A of the active Worksheet
' into an array
Sub GetCellValues()
Dim iRow As Integer            ' stores the current row number
Dim dCellValues() As Double  ' array to store the cell values
iRow = 1
ReDim dCellValues(1 To 10)
' Do Until loop to extract the value of each cell in column A
' of the active Worksheet, as long as the cell is not blank
Do Until IsEmpty(Cells(iRow, 1))
   ' Check that the dCellValues array is big enough
   ' If not, use ReDim to increase the size of the array by 10
   If UBound(dCellValues) < iRow Then
      ReDim Preserve dCellValues(1 To iRow + 9)
   End If
   ' Store the current cell in the CellValues array
   dCellValues(iRow) = Cells(iRow, 1).Value
   iRow = iRow + 1
Loop
End Sub

Toimenpide tallentaa aktiivisen laskentataulukon sarakkeen A arvot taulukkoon. Huomaa, että:

  • Kierto Do Until poimii kunkin solun arvot aktiivisen laskentataulukon sarakkeesta A jättäen tyhjät solut huomioimatta
  • Kunto "If UBound(dCellValues) < iRow” tarkistaa, että dCellValues-taulukko on tarpeeksi suuri tietojen säilyttämiseen, jos ei, käytä ReDim-komentoa lisätäksesi taulukon kokoa 10
  • Lopuksi koulutus​​dCellValues(iRow) = Cells(iRow, 1).Value” Tallentaa nykyisen solun CellValues-taulukkoon

VBA-esimerkki matemaattisilla operaatioilla

Seuraava alimenettely lukee arvot laskentataulukon "Sheet2" sarakkeesta A ja suorittaa aritmeettisia operaatioita arvoille. Tuloksena saadut arvot tulostetaan nykyisen aktiivisen laskentataulukon sarakkeeseen A.

Tämä makro havainnollistaa:

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.
  • Muuttuva ilmoitukset;
  • Excel-objektit (erityisesti Set-avainsanan käyttö ja 'Sarakkeet'-objektin käyttö 'Sheets'-objektista);
  • Sykli Do Until;
  • Käytä nykyisen Excel-työkirjan laskentataulukoita ja solualueita.
' Sub procedure to loop through the values in Column A of the Worksheet
' "Sheet2", perform arithmetic operations on each value, and write the
' result into Column A of the current Active Worksheet ("Sheet1")
Sub Transfer_ColA()
Dim i As Integer
Dim Col As Range
Dim dVal As Double
' Set the variable 'Col' to be Column A of Sheet 2
Set Col = Sheets("Sheet2").Columns("A")
i = 1
' Loop through each cell of the column 'Col' until
' a blank cell is encountered
Do Until IsEmpty(Col.Cells(i))
   ' Apply arithmetic operations to the value of the current cell
   dVal = Col.Cells(i).Value * 2 + 1
   ' The command below copies the result into Column A
   ' of the current Active Worksheet - no need to specify
   ' the Worksheet name as it is the active Worksheet.
   Cells(i, 1) = dVal
   i = i + 1
Loop
End Sub

VBA-esimerkki muokkauspäivämäärän tallennuksella

Kirjoitetaan yksinkertainen VBA-makro, joka käynnistyy, kun taulukkomme tietyn alueen solu päivitetään. Oletetaan, että haluat seurata muutoksia sarakkeessa B (B4–B11) ja tallentaa muutoksen päivämäärän ja kellonajan sarakkeeseen A.
Jatketaan näin:

  • Välilehdessä Developer napsauta vaihtoehtoa "Visual Basic" avataksesi VBA-editorin.
  • Kaksoisnapsauta VBA-editorissa Sheet2:een liittyvää koodieditoria.
  • Valitse Työtaulukko oikealta (tai vasemmalta) välilehdeltä ja valitse Muuta-vaihtoehto.
  • Lisää VBA-koodi:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
        Target.Range("A1:A1").Value = Now
    End If
End Sub

Tallenna työkirja makrojen ollessa käytössä (esimerkiksi .xlsm-tiedostona).


Nyt aina kun päivitämme solun sarakkeessa B (riviltä 1 riville 10), sarakkeen A solu näyttää automaattisesti nykyisen päivämäärän ja kellonajan.

Ercole Palmeri

Innovaatio-uutiskirje
Älä missaa tärkeimpiä innovaatioita koskevia uutisia. Rekisteröidy saadaksesi ne sähköpostitse.

Viimeaikaiset artikkelit

Tulevaisuus on täällä: kuinka merenkulkuala mullistaa maailmantalouden

Laivastosektori on todellinen maailmanlaajuinen talousmahti, joka on navigoinut kohti 150 miljardin markkinaa...

1 Toukokuu 2024

Julkaisijat ja OpenAI allekirjoittavat sopimuksia, joilla säännellään tekoälyn käsittelemää tiedonkulkua

Viime maanantaina Financial Times julkisti sopimuksen OpenAI:n kanssa. FT lisensoi maailmanluokan journalismiaan…

Huhtikuu 30 2024

Verkkomaksut: Näin suoratoistopalvelut saavat sinut maksamaan ikuisesti

Miljoonat ihmiset maksavat suoratoistopalveluista kuukausittaiset tilausmaksut. On yleinen mielipide, että sinä…

Huhtikuu 29 2024

Veeam tarjoaa kattavimman tuen kiristysohjelmille suojauksesta vastaukseen ja palautukseen

Veeamin Coveware tarjoaa jatkossakin kyberkiristystapahtumien reagointipalveluita. Coveware tarjoaa rikosteknisiä ja korjaavia ominaisuuksia…

Huhtikuu 23 2024