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