19. november 2018 - 14:19Der er
8 kommentarer og 1 løsning
Dynamiske formler i andre felter
Hej Eksperten
Jeg har arbejdet med en lidt kompleks sum-hvis-problematik. Jeg er kommet frem til, at hvis jeg kan få følgende løst, kan jeg løse min kollegas problem:
I feltet ark3!B1 har følgende formel: A2&B2&C2... som giver denne tekststreng: '=SUM.HVISER(ark2!A:A;ark2!B:B;ark1:B1;ark2!C:C;ark1!C1....)' Nu vil jeg gerne, at ark3!C1 resolver denne tekststreng, så det giver den faktiske formel
Prøv at specificere lidt mere konkret hvad det er du har af data, og hvad det er du vil ende op med. Det du har skrevet, er lidt kryptisk, og hænger ikke rigtig sammen!
I feltet A1 står formlen =B1&C1 som giver følgende teksstreng: "=SUM.HVISER(Q:Q;P:P;P1)" Det er en tektsstreng, jeg gerne vil have løst, som den formel den er. Hvordan gør jeg det?
Det tror jeg nok vi har forstået - det vi nok ikke helt forstår er, hvorfor det er nødvendigt at sætte formlen sammen på den måde. Det kan være, at hvis man forstår hvorfor, så kan man finde en lidt anden måde at gøre det samme på.
Eksperten har desværre ikke en upload-funktion, så folk plejer at bruge Dropbox eller tilsvarende. Vær dog opmærksom på person og firma følsomme informationer i den fil du uploader.
Det er nødvendigt, fordi jeg har en sum.hviser med forskellige kriterier. Nogle er blanke i nogle tilfælde. Det er excel ikke glad for. Jeg har derfor stykket sum.hviser-formlen sammen i et hjælpe-ark og concattet dem i en celle. Det er derfor dynamisk, hvad sum.hviser-formlen skal dække over.
Nå, stackoverflow havde en løsning. Den lægger jeg her:
Følgende VBA giver funktionen WM_EVAL(), hvor man lægger sin formel indeni. Man bør dog være obs på, at formlen SKAL være på engelsk. Så SUM.IFS() i stedet for SUM.HVISER. Men ellers virker det.
'' ' Evaluate Formula-Text in Excel ' Function wm_Eval(myFormula As String, ParamArray variablesAndValues() As Variant) As Variant Dim i As Long
' ' replace strings by values ' For i = LBound(variablesAndValues) To UBound(variablesAndValues) Step 2 myFormula = RegExpReplaceWord(myFormula, variablesAndValues(i), variablesAndValues(i + 1)) Next
' ' return value ' wm_Eval = Application.Evaluate(myFormula) End Function
'' ' Replace Whole Word ' ' Purpose : replace [strFind] with [strReplace] in [strSource] ' Comment : [strFind] can be plain text or a regexp pattern; ' all occurences of [strFind] are replaced Public Function RegExpReplaceWord(ByVal strSource As String, _ ByVal strFind As String, _ ByVal strReplace As String) As String
' early binding requires reference to Microsoft VBScript ' Regular Expressions: ' with late binding, no reference needed: Dim re As Object Set re = CreateObject("VBScript.RegExp")
re.Global = True 're.IgnoreCase = True ' <-- case insensitve re.Pattern = "\b" & strFind & "\b" RegExpReplaceWord = re.Replace(strSource, strReplace) Set re = Nothing End Function
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.