Makro #1, Excel makro kurs
Lage uttrekk fra en liste ved hjelp av 16000 formler – eller en makro på 12 linjer
Svært mange har svart at det å lære om programmering av makro’er hadde vært kjempenyttig, så vi durer i vei. Jeg har tatt utgangspunkt i et spørsmål jeg ofte får:
«Hvordan kan jeg finne alle linjer i en liste som oppfyller et bestemt krav og lage en ny liste med bare disse linjene?»
I dette tilfellet skal vi ha ut alle navn som begynner på f.eks «Joha».
I dette eksemplet har jeg laget en oversikt over etternavn og fornavn ut fra SSB’s oversikt over norske for- og etternavn og merket dem med kjønn.
Først har jeg laget 16.000 formler som løser oppgaven, og så gjør vi samme oppgave ved å skrive 12 linjer i VBA (Visual Basic For Applications). Makroen (eller subrutinen som jeg foretrekker å kalle det) er relativt enkel i leksjon 1, og så skal vi pusse på den og gjøre den morsommere etter hvert i de neste leksjonene.
Last ned regnearket her: Makro01.xlsm (542 downloads )
Artikkelen fortsetter under videoen
Subrutinen ser slik ut når vi er ferdige:
Sub Navn()
Linje = 1
For x = 2 To 4000
etternavn = Cells(x, 1)
If Left(etternavn, 4) = «Joha» Then
Linje = Linje + 1
Cells(Linje, 12) = etternavn
Cells(Linje, 11) = Cells(x, 2)
Cells(Linje, 13) = Cells(x, 3)
End If
Next x
End Sub
Vi tar en kikk på hovedelementene i denne programsnutten:
Nr 1) og 2), SUB og END SUB
Dette markerer start og slutt på programmet. Sub betyr at det er en programrutine som utfører en oppgave og ikke returnerer noen verdi, i motsetning til funksjoner som alltid returnerer en verdi.
En SUB må alltid avsluttes med en END SUB
Nr 3) og 4) FOR … NEXT
Alle linjer mellom FOR og NEXT utføres det antall ganger som angis etter FOR. I dette tilfellet vil linjene mellom FOR og NEXT bli utført 3999 ganger, fra 2 til 4000. Verdien som X har i hver loop bruker vi til å telle oss nedover rad for rad for å sjekke innholdet i linjene.
Har du en FOR i rutinen, må den alltid avsluttes med en NEXT
Nr 5) og 6) IF … THEN og END IF
Alle linjene mellom IF og END IF blir utført hvis betingelsen etter IF er oppfylt. I dette tilfellet er betingelsen
If Left(etternavn, 4) = «Joha» Then
som på godt norsk betyr
Hvis de fire venstre tegnene av etternavn er Joha, så (skal du)
I vårt tilfelle er denne betingelsen oppfylt i 7 tilfeller, og det er bare i disse tilfellene at linjene mellom IF og END IF blir utført.
CELLS()
Cells() er en av metodene vi kan bruke for å lese fra og skrive til cellene i regnearket. Første parameter angir radnummer og andre parameter angir kolonnenummer, slik at
N = Cells(2, 1) vil lese verdien i celle A2, som i eksemplet vårt er «Hansen».