Makro #1, Excel makro kurs

with Ingen kommentarer
Hyggelig om du deler:
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Lage uttrekk fra en liste ved hjelp av 16000 formler – eller en makro på 12 linjer

Makro #2Svæ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?»

Makro
Trekk ut alle linjer med etternavn som begynner på «Joha»

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 (362 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:

Makro

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». 

Makro01-Cells

 

Makro #2