VisualBasic - ohjelmointi - kurssiII
Lähetetty:
3. Ohjelmoinnin perusteet
Mallisovellus
- Avaa Excel, siirry VBA:han (Alt-F11) ja lisää moduli (Insert --> Module)
- Siirrä Module1:n koodi-ikkuna tyhjän alueen vasempaan yläkulmaan ja säädä ikkunan koko itsellesi sopivaksi.
- Kopioi Module1:n koodiksi seuraava teksti:
<TABLE BORDER="0" cellspacing="0"><TR><TD>
</TD></TR></TABLE>
- Talleta työkirja Kurssi -kansioon nimellä Template.xlsm (tai jos haluat Malli.xlsm)
- Mallityökirja on helppo avata Recent -valikosta.
3.1 If .. ElseIf .. Else -lause
If -lausetta käytetään valitsemaan suoritettavat komennot. Sen yksinkertaisin muoto on seuraava:
If ehto Then
[komennot]
End If
Koodin tulkinta:
- jos ehto = Tosi, komennot suoritetaan,
- muussa tapauksessa komentoja ei suoriteta vaan siirrytään End If -lauseen jälkeiselle riville.
Laajemmassa muodossa If -lauseen syntaksi kuuluu näin:
If ehto1 Then
[suorita nämä komennot]
ElseIf ehto2 Then
[suorita nämä komennot]
Else
[suorita nämä komennot]
End If
- kun yksi ehdoista toteutuu ja sitä vastaavat komennot on suoritettu, If -lauseen suoritus päättyy.
- ElseIf -lausetta ei aina tarvita, toisinaan niitä tarvitaan useampia,
- Else -lausetta ei aina tarvita, mutta hyvä ohjelmointikäytäntö on ottaa se mukaan yllättävien tapausten varalta.
- Yleisin koodaus -bugi on että End If -lause unohdetaan kirjoittaa...
Harjoitus 3-1-1
Avaa Template ja kirjoita seuraava koodi (rivikommentteja ei tarvitse kirjoittaa):
[myöhemmin kirjoitan koodit kopioitavaan muotoon mutta aluksi kun komentojen muotoja harjoitellaan, ne jäävät helpommin mieleen kun ne kirjoittaa itse.]
- 1. ohjelmarivillä kokonl -muuttuja saa arvokseen tämänhetkisen kuukaudenpäivän. Tätä postitettaessa sen arvoksi tuli 20.
- If -lauseella valitaan arvo, joka teksti -muuttujalle annetaan.
kokonl = 20 --> ehto1 ei ole Tosi --> siirrytään ehto2:een --> ehto2 toteutuu --> tekstille annetaan arvo "Olemme kuun keskivaiheilla." --> siirrytään End If -lauseen jälkeiselle riville.
Huom!
Muuttuja teksti sai tässä tietyn arvon mutta koska teksti on lokaali muuttuja sen arvo ei säily.
Sen elinkaari päättyy heti makron suorittamisen jälkeen. Tällöin sen arvo on määrittelemätön (N/A ~Not Accessible ~ei käytettävissä)
Laita koodiin seuraava pieni lisäys, joka hyödyntää sisäistä funktiota nimeltä MsgBox.
Näitä ohjelmoinnin perusharjoitksia ei välttämättä tarvitse tallentaa.
Tehtävä 3-1-1
Avaa Template.
Kirjoita yo. harjoituksen mukaisesti koodi, joka tulostaa
- "Elämme vasta alkuviikkoa.."
- "Olemme jo loppuviikolla!"
- "Tänään on Sunnuntai."
Tilanteen mukaan tietysti!
Tehtävä 3-1-2
Avaa Template ja kopioi seuraava taulukko exceliin solusta A2 alkaen.
<TABLE BORDER="1" cellspacing="0"><TR><TD>K. Abbott</TD><TD>Weybridge</TD><TD>22.03.1975
</TD></TR><TR><TD>E. Skinner</TD><TD>London</TD><TD>15.04.1998
</TD></TR><TR><TD>J. Doyle</TD><TD>Ashford</TD><TD>26.12.1997
</TD></TR><TR><TD>G. Naylor</TD><TD>London</TD><TD>29.05.1976
</TD></TR><TR><TD>M. Mellor</TD><TD>Brackley</TD><TD>03.01.1993
</TD></TR><TR><TD>J. Gordon</TD><TD>Liverpool</TD><TD>20.06.1980
</TD></TR><TR><TD>C. O'Brien</TD><TD>Bishop's Cleeve</TD><TD>17.09.1968
</TD></TR><TR><TD>L. Kennedy</TD><TD>Sutton</TD><TD>29.07.1986
</TD></TR><TR><TD>M. Davison</TD><TD>London</TD><TD>18.01.1979
</TD></TR><TR><TD>L. Warner</TD><TD>Charlbury</TD><TD>21.02.1973
</TD></TR><TR><TD>F. Bell</TD><TD>Portslade</TD><TD>09.08.1958
</TD></TR><TR><TD>J. Gilbert</TD><TD>London</TD><TD>07.11.1982
</TD></TR><TR><TD>E. Ellis</TD><TD>London</TD><TD>04.01.2000
</TD></TR><TR><TD>D. Barnes</TD><TD>Cholsey</TD><TD>01.05.1956
</TD></TR><TR><TD>C. Chandler</TD><TD>London</TD><TD>28.06.1982
</TD></TR><TR><TD>K. Swift</TD><TD>Warland</TD><TD>01.04.1989
</TD></TR><TR><TD>B. Harrison</TD><TD>Newton</TD><TD>27.01.1966
</TD></TR><TR><TD>B. Dobson</TD><TD>Titsey</TD><TD>15.07.1976
</TD></TR><TR><TD>G. Pugh</TD><TD>Nettlerbridge</TD><TD>17.10.1999
</TD></TR><TR><TD>E. Gibbons</TD><TD>Buxworth</TD><TD>22.06.1955
</TD></TR><TR><TD>L. Nicholson</TD><TD>Fulletby</TD><TD>29.10.1960
</TD></TR><TR><TD>K. Mill</TD><TD>Southampton</TD><TD>12.12.1963
</TD></TR><TR><TD></TD></TR></TABLE>
Kirjoita koodi, joka
- otsikoi (1. riville) taulukon sarakkeet, D-sarakkeen otsikoksi tulee Viiteryhmä.
- kirjoittaa D-sarakkeeseen jokaisen kansalaisen viiteryhmän
-- "junior", jos hänen ikänsä on alle 18 vuotta,
-- "senior", jos hänen ikänsä on yli 60 vuotta,
-- "medior", jos hänen ikänsä on yo. rajojen välissä.
-
Mallisovellus
- Avaa Excel, siirry VBA:han (Alt-F11) ja lisää moduli (Insert --> Module)
- Siirrä Module1:n koodi-ikkuna tyhjän alueen vasempaan yläkulmaan ja säädä ikkunan koko itsellesi sopivaksi.
- Kopioi Module1:n koodiksi seuraava teksti:
<TABLE BORDER="0" cellspacing="0"><TR><TD>
Koodi: Valitse kaikki
Option Explicit
Sub Esimerkki()
'======== Muuttujamäärittelyt
'======== Ohjelmakomennot
'======== Virhekäsittelijä
End Sub
- Talleta työkirja Kurssi -kansioon nimellä Template.xlsm (tai jos haluat Malli.xlsm)
- Mallityökirja on helppo avata Recent -valikosta.
3.1 If .. ElseIf .. Else -lause
If -lausetta käytetään valitsemaan suoritettavat komennot. Sen yksinkertaisin muoto on seuraava:
If ehto Then
[komennot]
End If
Koodin tulkinta:
- jos ehto = Tosi, komennot suoritetaan,
- muussa tapauksessa komentoja ei suoriteta vaan siirrytään End If -lauseen jälkeiselle riville.
Laajemmassa muodossa If -lauseen syntaksi kuuluu näin:
If ehto1 Then
[suorita nämä komennot]
ElseIf ehto2 Then
[suorita nämä komennot]
Else
[suorita nämä komennot]
End If
- kun yksi ehdoista toteutuu ja sitä vastaavat komennot on suoritettu, If -lauseen suoritus päättyy.
- ElseIf -lausetta ei aina tarvita, toisinaan niitä tarvitaan useampia,
- Else -lausetta ei aina tarvita, mutta hyvä ohjelmointikäytäntö on ottaa se mukaan yllättävien tapausten varalta.
- Yleisin koodaus -bugi on että End If -lause unohdetaan kirjoittaa...
Harjoitus 3-1-1
Avaa Template ja kirjoita seuraava koodi (rivikommentteja ei tarvitse kirjoittaa):
[myöhemmin kirjoitan koodit kopioitavaan muotoon mutta aluksi kun komentojen muotoja harjoitellaan, ne jäävät helpommin mieleen kun ne kirjoittaa itse.]
- 1. ohjelmarivillä kokonl -muuttuja saa arvokseen tämänhetkisen kuukaudenpäivän. Tätä postitettaessa sen arvoksi tuli 20.
- If -lauseella valitaan arvo, joka teksti -muuttujalle annetaan.
kokonl = 20 --> ehto1 ei ole Tosi --> siirrytään ehto2:een --> ehto2 toteutuu --> tekstille annetaan arvo "Olemme kuun keskivaiheilla." --> siirrytään End If -lauseen jälkeiselle riville.
Huom!
Muuttuja teksti sai tässä tietyn arvon mutta koska teksti on lokaali muuttuja sen arvo ei säily.
Sen elinkaari päättyy heti makron suorittamisen jälkeen. Tällöin sen arvo on määrittelemätön (N/A ~Not Accessible ~ei käytettävissä)
Laita koodiin seuraava pieni lisäys, joka hyödyntää sisäistä funktiota nimeltä MsgBox.
Näitä ohjelmoinnin perusharjoitksia ei välttämättä tarvitse tallentaa.
Tehtävä 3-1-1
Avaa Template.
Kirjoita yo. harjoituksen mukaisesti koodi, joka tulostaa
- "Elämme vasta alkuviikkoa.."
- "Olemme jo loppuviikolla!"
- "Tänään on Sunnuntai."
Tilanteen mukaan tietysti!
Tehtävä 3-1-2
Avaa Template ja kopioi seuraava taulukko exceliin solusta A2 alkaen.
<TABLE BORDER="1" cellspacing="0"><TR><TD>K. Abbott</TD><TD>Weybridge</TD><TD>22.03.1975
</TD></TR><TR><TD>E. Skinner</TD><TD>London</TD><TD>15.04.1998
</TD></TR><TR><TD>J. Doyle</TD><TD>Ashford</TD><TD>26.12.1997
</TD></TR><TR><TD>G. Naylor</TD><TD>London</TD><TD>29.05.1976
</TD></TR><TR><TD>M. Mellor</TD><TD>Brackley</TD><TD>03.01.1993
</TD></TR><TR><TD>J. Gordon</TD><TD>Liverpool</TD><TD>20.06.1980
</TD></TR><TR><TD>C. O'Brien</TD><TD>Bishop's Cleeve</TD><TD>17.09.1968
</TD></TR><TR><TD>L. Kennedy</TD><TD>Sutton</TD><TD>29.07.1986
</TD></TR><TR><TD>M. Davison</TD><TD>London</TD><TD>18.01.1979
</TD></TR><TR><TD>L. Warner</TD><TD>Charlbury</TD><TD>21.02.1973
</TD></TR><TR><TD>F. Bell</TD><TD>Portslade</TD><TD>09.08.1958
</TD></TR><TR><TD>J. Gilbert</TD><TD>London</TD><TD>07.11.1982
</TD></TR><TR><TD>E. Ellis</TD><TD>London</TD><TD>04.01.2000
</TD></TR><TR><TD>D. Barnes</TD><TD>Cholsey</TD><TD>01.05.1956
</TD></TR><TR><TD>C. Chandler</TD><TD>London</TD><TD>28.06.1982
</TD></TR><TR><TD>K. Swift</TD><TD>Warland</TD><TD>01.04.1989
</TD></TR><TR><TD>B. Harrison</TD><TD>Newton</TD><TD>27.01.1966
</TD></TR><TR><TD>B. Dobson</TD><TD>Titsey</TD><TD>15.07.1976
</TD></TR><TR><TD>G. Pugh</TD><TD>Nettlerbridge</TD><TD>17.10.1999
</TD></TR><TR><TD>E. Gibbons</TD><TD>Buxworth</TD><TD>22.06.1955
</TD></TR><TR><TD>L. Nicholson</TD><TD>Fulletby</TD><TD>29.10.1960
</TD></TR><TR><TD>K. Mill</TD><TD>Southampton</TD><TD>12.12.1963
</TD></TR><TR><TD></TD></TR></TABLE>
Kirjoita koodi, joka
- otsikoi (1. riville) taulukon sarakkeet, D-sarakkeen otsikoksi tulee Viiteryhmä.
- kirjoittaa D-sarakkeeseen jokaisen kansalaisen viiteryhmän
-- "junior", jos hänen ikänsä on alle 18 vuotta,
-- "senior", jos hänen ikänsä on yli 60 vuotta,
-- "medior", jos hänen ikänsä on yo. rajojen välissä.
-