Använda kalkylbladsfunktioner för matrisberäkningar

Med undantag av ett fåtal funktioner kan de flesta kalkylbladsfunktionerna användas vid programmering.

XL-Dennis rekommenderar att, så långt det är möjligt, använda kalkylbladsfunktioner i VBA-sammanhang.

Förklaringen därtill är enkel:
Kalkylbladsfunktionerna ingår i den kompilerade Excel.exe-filen och exekveras oftast snabbare än egna konstruerade VBA-formler.

Detta blir framträdande när vi använder oss av matriser med stora datamängder och där vi vill utföra någon form av beräkning.

Noterbart är också att här används inte den korrekta,  tekniskt sett, anropen av funktionerna, såsom Application.Worksheetsfunction. Faktum är att vi kan bortse från det helt och hållet.


I det första exemplet demonstreras hur vi använder oss av SUMMA-funktionen:

Sub Summera_Matris()
'© 2001 Alla rättigheter XL-Dennis
Dim wsBlad As Worksheet
Dim rnOmrade As Range, rnSumma As Range
Dim vaSumma As Variant

Set wsBlad = ThisWorkbook.Worksheets("Blad1")
Set rnOmrade = wsBlad.Range("A2:A20")
Set rnSumma = wsBlad.Range("D1")
vaSumma = rnOmrade.Value

rnSumma = Application.Sum(vaSumma)
End Sub

 

I det andra exemplet belyses hur vi kan använda oss av MEDEL-funktionen:

Sub Medelvarde_Matris()
'© 2001 Alla rättigheter XL-Dennis
Dim wsBlad As Worksheet
Dim rnOmrade As Range, rnMedel As Range
Dim vaMedel As Variant

Set wsBlad = ThisWorkbook.Worksheets("Blad1")
Set rnOmrade = wsBlad.Range("B2:B10")
Set rnMedel = wsBlad.Range("D2")
vaMedel = rnOmrade.Value

rnMedel = Application.Average(vaMedel)
End Sub

 

I det tredje exemplet visas hur vi kan leta upp ett värde i en matris:

Sub LetaUpp_Matris()
'© 2001 Alla rättigheter XL-Dennis
Dim vaTabell As Variant, vaVarde As Variant, vUtfall As Variant

vaTabell = Array("A", "B", "C", "D", "E", "F", "G")
vaVarde = "D"

vUtfall =  _
Application.VLookup(vaVarde, Application.Transpose(vaTabell), 1, 0)

'Om värdet inte finns så returneras ett felvärde vilket vi
'använder oss av för att styra händelseförloppet.
If Not IsError(vUtfall) Then
      MsgBox "Värdet " & vaVarde & " finns!"

Else
     MsgBox "Värdet " & vaVarde & " finns ej!"

End If

End Sub