Esimerkkejä taulukkolaskentatyökalujen käytöstä:
Seuraavassa esitellään muutamia nauhoittamalla tehtyjä makroesimerkkejä. Esimerkkeihin on liitetty myös parannusehdotuksia, joilla makroista saadaan toimivampia ongelmaan, johon ne on toteutettu. Esimerkeissä on ensin lyhyt suunnitelma makroon tulevista toimenpiteistä ja tämän jälkeen löytyy vastaava makrokoodi. Esimerkeistä saa parhaiten tietoa vertailemalla suunnitelmaa ja makrokoodia keskenään.
Seuraavassa esimerkki tekstinkäsittelyssä (Word) joillekin käyttökelpoisesta makrosta. Loput esimerkistä ovat Excelissä nauhoitettuja makroja. Makron tarkoituksena on mahdollistaa pitkien lähdeviitteiden lisääminen tekstin joukkoon pikanäppäintä painamalla. Välttämättä toimintaan ei tarvita makroa, koska vastaava toiminta voidaan tehdä AutoCorrect-ominaisuuden avulla.
Sub lahdeviite()
Selection.TypeText Text:="[Kukkanen, 2002, sivut ]"
End Sub
Seuraava esimerkki on yksinkertaisin mahdollinen makroesimerkki, jossa valitaan solu ja kirjoitetaan soluun tietoa.
Sub Kirjoita_soluun()
Range("A3").Select
ActiveCell.FormulaR1C1 = "Kukka"
End Sub
Makrolla kopioidaan valittu solualue toiseen paikkaan.
Sub kopioi()
ActiveSheet.Unprotect
Range("A1:C6").Select
Selection.Copy
Range("G8").Select
ActiveSheet.Paste
ActiveSheet.Protect
End Sub
Makron tarkoituksena on mahdollistaa säätilataulukkoon lisääminen ja muokkaaminen. Makrossa ei varsinaisesti lisätä tai muokata säätilataulukkoa, vaan ainoastaan avataan datalomake, jolla muutokset voidaan suorittaa.
Sub lisaa()
ActiveSheet.Unprotect
Range("A1").Select
ActiveSheet.ShowDataForm
ActiveSheet.Protect
End Sub
Makro järjestää säätilataulukon lämpötilan mukaan nousevaan järjestykseen.
Sub jarjesta()
ActiveSheet.Unprotect
Columns("A:D").Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveSheet.Protect
End Sub
Makroa voitaisiin parantaa siten, että käytettäisiin sarakeviittausten (A:D) sijasta nimettyä aluetta saatila. Tällöin makron sarakkeiden valinnan tekevä rivi pitäisi muuttaa seuraavaksi:
Columns("saatila").Select
Suodata makrolla on tarkoitus suodattaa solualuetta käyttäjän antamien ehtojen perusteella erikoissuodatustyökalulla. Työkalun erikoispiirteenä on suodatuksen toteuttaminen erillisen ehtoalueen avulla.
Sub suodata()
ActiveSheet.Unprotect
Columns("A:D").Select
Range("A1:D30").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("I1:L2"), Unique:=False
ActiveSheet.Protect
End Sub
Edelliseen makroon parannuksena voitaisiin vaihtaa suodatettavan solualueen ja ehtoalueen viittaus nimetyille alueille, jolloin makro toimisi myös alueen laajenemisen yhteydessä. Seuraavassa suodatuksen toteuttava rivi muutettuna yleiskäyttöisemmäksi.
Range("saatila").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("ehdot"), Unique:=False
Seuraavalla makrolla saadaan näkyviin erikoissuodatuksella suodatetut rivit.
Sub naytakaikki()
ActiveSheet.Unprotect
ActiveSheet.ShowAllData
ActiveSheet.Protect
End Sub
Kaavioiden tekemisessä on ongelmana usein kaavioalueen sarjojen lisääntyminen. Lisääntyneet sarjat eivät tule näkyviin kaavion päivitysyrityksistä huolimatta, koska kaavioon tallentuu nimetyn alueen sijasta soluviittaukset. Tämän vuoksi kaavioille voi olla hyödyllistä nauhoittaa kaavion päivittävä makro.
Sub kaavion_paivitys()
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=Sheets("Kurssi1").Range("A2:A7,I2:I7"), _
PlotBy:=xlRows
End Sub
Edellisessä makrossa on viittaukset suoritetaan suoraan soluihin, joten päivityksen varmistamiseksi täytyy solualue viittaus A2:A7,I2:I7 muuttaa nimetyksi alueeksi yhteensa myös makrossa.
Esimerkkien makroihin on jouduttu tekemään paljon korjauksia käsin ja toimenpiteita on tullut kohtuullisen paljon. Kannattaa pyrkiä toteuttamaan toiminnot esimerkkejä helpommin, mutta joskus se ei onnistu!
Seuraavassa on hieman toisenlainen esimerkki tietojen kysymisestä. Kysyminen tehdään erillisen InputBoxin avulla. Tämän vuoksi makrossa joudutaan kopioimaan tarvittavia kaavoja. Lisäys voidaan totettaa huomattavasti helpommin datalomakkeen avulla.
Sub lisaa_harkka()
ActiveSheet.Unprotect
Range("A3").Select
Selection.EntireRow.Insert
Range("A2:F2").Select
Selection.Copy
Range("A3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A3").Select
ActiveCell.FormulaR1C1 = InputBox("Anna opis ID")
Range("C3").Select
ActiveCell.FormulaR1C1 = InputBox("Anna Bonus")
Range("D3").Select
ActiveCell.FormulaR1C1 = InputBox("Anna HT1 PVM")
Range("E3").Select
ActiveCell.FormulaR1C1 = InputBox("Anna HT2PVM")
Range("A3").Select
ActiveSheet.Protect
End Sub
Seuraavassa on pieni työkalu suojausten päälle laittamiseksi kaikkiin laskentataulukoihin. Kun tehdään pientä taulukkolaskentasovellusta, niin usein on tarpeen testata suojausten toimintaa. Tällöin tarvitaan usein suojaukset päälle asettavaa makroa.
Sub suojaukset_paalle()
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
Sheets(i).Protect
Next i
Application.ScreenUpdating = True
End Sub
Seuraavassa on pieni työkalu suojausten poistamiseksi laskentataulukoista. Kun tehdään pientä taulukkolaskentasovellusta, niin usein on tarpeen testata suojausten toimintaa tai esimerkiksi muuttaa tyylin ominaisuuksia. Toimet eivät välttämättä onnistu, jos kaikista laskentataulukoista ei ole poistettu suojauksia. Tällöin tarvitaan tarvitaan suojaukset nopeasti poistavaa makroa.
Sub suojaukset_pois()
Application.ScreenUpdating = False
For i = 1 To Sheets.Count
Sheets(i).Unprotect
Next i
Application.ScreenUpdating = True
End Sub
Eräs makrojen sovellusesimerkki on työkalu Excel-taulukon muuttamiseksi HTML-taulukoksi. Makro täytyy kirjoittaa kokonaan käsin, joten sen tekeminen ei onnistu ilman jonkinlaista ohjelmointikielen tuntemusta. Jos haluat lisätietoja tai kokeilla makron toimintaa, niin tutustu tarkempiin ohjeisiin.
Seuraavassa on esitelty muutamia makroihin lisättäviä ja makroilla saavutettavia lisäominaisuuksia.
Käyttäjän kanssa voidaan kommuninoida muutamalla helppokäyttöisellä elementillä, jotka voidaan lisätä makroon.
Excelin makrokielen (VBA) avulla voidaan tehdä omia taulukkolaskentafunktioita, joita voidaan käyttää apuna laskennassa. Omat funktiot voidaan lisätä normaalisti ohjatun funktion lisäämistä valikkokomennolla Insert | Function. Oma funktio löytyy käyttäjän määrittelemien (engl. User Defined) funktioiden joukosta.
Funktiot joudutaan kirjoittamaan kokonaan käsin, joten niiden tekeminen vaatii jonkinlaista ohjelmointikielen tuntemusta. Seuraava omasumma-funktio on yksikertaisin esimerkki oman funktion toteuttamisesta. Funktio laskee kahden luvun tai kahdessa solussa olevien lukujen summan. Esimerkkifunktio ei ole käyttökelpoinen, koska taulukkolaskentaohjelmista löytyy parempia funktioita kyseiseen käyttötarkoitukseen, mutta se on riittävän yksikertainen esimerkki funktion toiminnasta.
Function omasumma(ekaluku As Integer, tokaluku As Integer) As Integer ' Petri Heinonen 20.02.2002 ' Tämä on esimerkki mahdollisimman yksinkertaisesta itsetehdystä funktiosta ' Funktiolla voidaan laskea kahden parametrina annetun solun summan. ' Funktio omasumma = ekaluku + tokaluku ' Jos funktion halutaan palauttavan sijaintisoluunsa tuloksen, ' niin palauttaminen voidaan toteuttaa sijoittamalla ' haluttu arvo funktion nimeen edellisen esimerkin mukaisesti. End Function
Esimerkki funktion kutsusta ja sen palauttamasta arvosta.
Seuraava funktio on hieman edellistä käyttökelpoisempi. Funktiolla lasketaan kahden luvun tai soluarvon perusteella X^Y+1-sarjan arvoja. Kyseinen kaava voitaisiin toki toteuttaa suoraan laskutoimituksena soluviittauksilla, mutta sen tekeminen funktioksi helpottaa tulevaisuudessa kyseisen kaavan käyttöä.
Function SARJA(X As Integer, Y As Integer)
' Esimerkki omasta taulukkolaskentafunktiosta
' Funktio laskee kaavanmukaisen tuloksen annetuista luvuista
SARJA = X ^ Y + 1
End Function
Esimerkkejä funktion kutsusta ja sen palauttamista arvoista.
Taulukkolaskennan työkirjamalliin voidaan tallentaa
Esimerkiksi opettaja voi tallentaa työkirjamalliksi opiskelijoiden arvosanojen laskentaan käyttämänsä sovelluksen. Ennen tallentamista hän on tyhjentänyt sovelluksen opiskelijoista. Opettaja voi käyttää eri luokille tai vuosikursseille aina uutta työkirjamalliin perustuvaa opiskelijoiden arvosanojen laskentasovellusta.