prime numbers
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.
macro
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:
macro

Kanskje du finner en bedre måte?

Tilbake til index