Beräkna kalkybladsformler i VBA &
visa resultatet i celler


Här demonstreras en teknik eller mer korrekt en metod för att beräkna kalkylbladsfunktioner och formler och därefter visa utfallet direkt i en eller flera celler.

Det sker mha EVALUATE och metoden kräver ett  textuttryck som argument.  Förfarandet kan prestandamässigt vara mer fördelaktigt än att direkt tilldela resultatcellerna formlerna.

Dock krävs det att formlerna är på engelska och Formelöversättaren kan avsevärt underlätta framtagningen av dessa.

I det första exemplet visas hur vi kan beräkna en relativ komplex OM-formel medan det andra exemplet visar hur vi hanterar matrisformler i detta sammanhang.

 

Option Explicit  

Sub Berakna_Formel_Resultat_Cellen()

   '© 2003 Alla rättigheter XL-Dennis

   Dim wbBook As Workbook

   Dim wsSheet As Worksheet

   Dim rnTarget As Range

   Dim vaValue As Variant

 

   Set wbBook = ThisWorkbook

   Set wsSheet = wbBook.Worksheets("Blad1")

 

   With wsSheet

      Set rnTarget = .Range("A2")

   End With

 

   'Här tilldelas variabeln resultatet av formelberäkningen.

   vaValue = Application.Evaluate( _

         "IF(LEN(A1)<=1,"""", IF(ISNA(VLOOKUP(A1,B2:C100,2)),"""",VLOOKUP(A1,B2:C100,2)))")

 

   'Så här ser formeln ut på svenska:

   '=OM(LÄNGD(A1)<=1;""; OM(ÄRSAKNAD(LETARAD(A1;B2:C100;2));"";LETARAD(A1;B2:C100;2)))

 

   'Här tilldelas cellen resultatet av formelberäkningen

   rnTarget.Value = vaValue

End Sub

 

Option Explicit  

Sub Berakna_Matrisformel_Resultat_Cellen()

   '© 2003 Alla rättigheter XL-Dennis

   Dim wbBook As Workbook

   Dim wsSheet As Worksheet

   Dim rnTarget As Range

   Dim vaValue As Variant

 

   Set wbBook = ThisWorkbook

   Set wsSheet = wbBook.Worksheets("Blad1")

 

   With wsSheet

      Set rnTarget = .Range("B10")

   End With

 

   'Här tilldelas variabeln resultatet av matrisformelberäkningen.

   vaValue = Application.Evaluate("SUM(IF(A3:A5=2,B3:B5,0))")

 

   'Så här ser matrisformeln ut på svenska:

   'SUMMA(OM(A3:A5=2;B3:B5;0))

 

   'Här tilldelas cellen resultatet av formelberäkningen

   rnTarget.Value = vaValue

End Sub