|
Lag en makro som identifiserer primtall
|
Anta at en celle er utvalgt som inneholder et heltall. Makroen skal
farge cellen rød dersom tallet er prim.
|
Først må makroen lese cellens innhold og lagre den i en variabel:
Dim innhold As Integer
innhold = Selection.Value
|
|
Nå må det bli selve testen. I denne testen må vi finne ut om
tallet kan deles med et annet tall uten rest. Det er ganske lett hvis du holder
deg konsekvent til heltall, dvs. integer.
|
For eksempel, hvis du har en integer variable og registrer resultatet av 5/3:
Dim res As Integer
res = 5/3
vil du finne at variablen 'res' nå inneholder ikke 1.666667 men 2.
|
Dermed kan du teste om cellinnholdet kan deles med for eksempel 3 uten rest
på følgende måte:
Dim res As Integer
res = innhold / 3
If (3*res = innhold) Then
' Kunne dele uten rest: innhold er ikke prim
End If
|
|
Så snart du har funnet en divisor som gir deg en deling uten rest, vet
du at cellinnholdet ikke var prim.
|
Du kan gjøre den samme testen elegantere ved hjelp av Mod
funksjonen. For eksempel:
10 mod 2 = 0
10 mod 3 = 1
10 mod 4 = 2
10 mod 5 = 0
10 mod 6 = 4
Skjønner du prinsippet? Modulo gir deg alltid resten av heltalls-divisjon.
Et tall A er delbart med et annet tall B uten rest dersom A mod B = 0.
|
Du kunne altså teste om cellinnholdet kan deles med for eksempel 3 uten rest
også på følgende måte:
If (innhold Mod 3 = 0) Then
' Kunne dele uten rest: innhold er ikke prim
End If
|
|
For å kunne utføre denne type test systematisk på alle aktuelle
divisorer, vil du trenge en For... Next løkke.
|
Når det funker, vil du se at det er litt tungvint å bruke. Du må
kjøre makroen 25 ganger for å få til dette:
Kanskje du finner en bedre måte?
|