Läsa data från/till arbetsblad

Det är vanligt att läsa data från arbetsblad, bearbeta den och slutligen returnera data till arbetsbladet.

För ytterligare exempel på matriser se  - ListBox.


Att läsa in data från ett kalkylblad kan ske på flera sätt. Det snabbaste sättet är att läsa in den i en matris (array). När data är inläst till matrisen kan bearbetning ske smidigt genom att loopa igenom matrisen. Därefter kan värdena läsas tillbaka till kalkylbladet, dvs returnera den förädlade data tillbaka till arbetsbladet.

När värdena läses in till en matris, som är deklarad som Variant,  börjar alltid matrisens index på 1 oavsett vad som är deklarerat vid Option Base (Dock kan man kringgå det - se ListBox.) 

Oavsett om matrisen bara har en rads eller en kolumns värden är matrisen alltid två-dimensionell, vilket återspeglar den struktur som finns i arbetsblad (varje cellnamn är unikt i det att celler får sina namn beroende på i vilken kolumn och rad de återfinns i). Detta är en stor fördel när man ska returnera värdena till arbetsbladen.

Option Explicit
Option Base 1


Sub Lasa_Bearbeta_Skriva_Data()
Dim vaDataArray As Variant
Dim rgData As Range
Dim i As Integer

'Då vi i exemplet varken vet antal fyllda celler eller vilka dessa är 
'måste de först identifieras.

Set rgData = Range("A1", Range("A1").End(xlDown))

'Här läser vi in data till matrisen från det identifierade cellområdet.
vaDataArray = rgData.Value

'Bearbetning av data sker i matrisen. Då alla värdena återfinns i
'första kolumnen kan vi här använda oss av konstantvärdet 1.
'Vi vet inte antalet värden varför vi överlåter till XL att loppa
'igenom matrisen till dess att den når det sista värdet mha
'UBound.  
For i = 1 To UBound(vaDataArray)
         If vaDataArray(i, 1) > 1 Then
             vaDataArray(i, 1) = vaDataArray(i, 1) * 0.1
         End If
Next i

'Slutligen returneras den bearbetade data tillbaka till arbetsbladet.
rgData.Value = vaDataArray

End Sub