Förstå RANGE i Excel

Nivå: Avancerad

(Till detta exempel finns en Excelarbetsbok med programkod att ladda ner för den som vill fördjupa sig. ) När man arbetar med Excel och utvecklar egna makron är objetet RANGE grundläggande i Excel. Man kan förstå RANGE som att det är ett område av celler i ett kalkylark som ges ett namn. När man väl förstått hur RANGE fungerar och hur man kan använda det, öppnas en helt ny värld av möjligheter och lösningar.

I detta exempel antar vi följande:
Vi skall leta efter en speciell egenskap i ett definierat område med celler (…ett Range!).  Vi har två kolumner på ett Excelark, kolumnen Produkt, och kolumnen Pris. Antag nu att vi vill leta efter alla som har egenskapen Produkt A i arket. När vi hittar Produkt A, vill vi att priset skall markeras och bli rött. Vi vill också att programmet skall tala om för oss hur många Produkt A det fanns i prislistan. Som grädde på moset så lägger vi till hur lång tid det tog för  Excel att utföra proceduren att räkna igenom det hela.

Här är ett förslag till lösning:
Förberedelser: Innan vi börjar programmera i Excel, definierar vi två områden(=RANGE) där vi skall leta. Det ena området med celler kallar vi Produkt, det andra området kallar vi Pris. Namnområdet skapas genom att det defineras från menyraden i Excel, under, Infoga – > Namn – > Definiera.  Vi har nu definerat två s.k. range,  Produkt och Pris. Nu är det dags att skriva programkoden i Excel.

Infoga en ny modul i Visual Basic Editor (gå in VBE med Alt+F11, eller från menyraden i Excel). Nu skrivs följande programkod in:

Sub SkapaProduktAFält()

Worksheets(”sp_pris”).Activate
Dim t As Double
Dim i As Long, j As Long
t = Timer
Dim rngProdukt As Range
Dim rngPris As Range
Dim Raknare As Long
Dim ranknare1 As Long

’Definerar upp kolumen för Produkt-kolumnen…
Set rngProdukt = Range(”Produkt”)

’Definerar upp kolumen för Pris-kolumnen…
Set rngPris = Range(”Pris”)
Raknare = 0
raknare1 = 0

’Här utförs loopen där vi letar efter egenskapen,

For i = 1 To rngProdukt.Rows.Count
    For j = 1 To rngProdukt.Columns.Count
        If rngProdukt.Cells(i, j).Value = ”Produkt A” Then
        rngPris.Cells(i).Font.ColorIndex = 3
        Raknare = Raknare + 1
    Else
    raknare1 = raknare1 + 1
    End If
Next j
Next i
MsgBox ”På ” & Timer – t & ” sek. hittade jag totalt ” & Raknare & ” celler med egenskapen.”
MsgBox ”…och ” & raknare1 & ” celler hade INTE egenskapen”

 

’Radera och förstår objekten…
Set rngProdukt = Nothing
Set rngPris = Nothing

End Sub

Kommentar:  När vi letar efter Produkt A i vårt kalkylark, så använder vi en For…next loop. Främsta skälet är att den har en inbyggd räknare som håller koll på hur många gånger den skall utföra uttrycket och leta igenom raderna efter Produkt A.  Vad den gör är att den letar upp den sista cellen i området (range) och börjar leta sig uppåt. Ett annat skäl till att använda For…next lopp är man inte alltid vet hur många gånger programkoden skall loopa igenom och leta efter Produkt A i kalkylarket. Prislistan kan ju uppdateras,  nya produkter kan tillkomma, och gamla kan tas bort osv.

Du kan ladda ner detta Excelexempel och testa på din egen dator dator.  Ladda ner  Excelboken här:

Share