07. august 2002 - 14:56Der er
23 kommentarer og 2 løsninger
Formel og resultat i samme celle
Kan det overhovedet lade sig gøre at indtaste en formel i en celle og derefter indtaste et tal i samme celle hvorefter formlen regner resultatet ud og skifter dette ud med det indtastede tal?
Selv synes jeg det lød umuligt, men nogle påstår at det kan lade sig gøre.
Rolig chewie - svaret kan godt være NEJ - det afhænger meget af, hvilken formel der snakkes om, og hvad det indtastede tal skal.
Private msFormula As String
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCalcCell As Range Set rCalcCell = Range("D2")
If Not Intersect(Target, rCalcCell) Is Nothing Then If Left(Target.FormulaR1C1, 1) = "=" Then msFormula = Target.FormulaR1C1 Else Target.FormulaR1C1 = msFormula & "+" & Target.Value End If End If Set rCalcCell = Nothing End Sub
Denne makro kræver dog, at du altid trykker F2 + Enter efter at regnearket er åbnet, for at variablen msFormula får det rigtige indhold. Kan du ikke fortælle hvad du præcis skal ?
Nej, bak - du har ret, men jeg kom til at tænke selv....!!! Hvis værdierne for denne formel f.eks. ændre sig, så vil ovenstående medtage denne ændring pga. linien Target.FormulaR1C1 = msFormula & "+" & Target.Value, men det kan jo sagtens ændres, det er jo heller ikke sikkert, at værdien skal adderes. Derfor spørger jeg også til den præcise opgave.
Det kan være at jeg totalt har misforstået spørgsmålet, men som jeg læser det ønsker povlsen at kunne oprette en formel i fx A1. Derefter vil han kunne taste et tal i A1, som bliver brugt i formlen. Det resultat som formlen beregner skal så skrives i A1 i stedet for formlen. Altså en form for cirkulær cellerefence.
A1: =A1 * 12 med den forskel, at A1 indtastes oven i formlen.
En lille udbygning af flemmings formel vil kunne klare det som JKrons siger. Private msFormula As String
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCalcCell As Range Dim x Dim formel As String Set rCalcCell = Range("D2") If Not Intersect(Target, rCalcCell) Is Nothing Then If Left(Target.Formula, 1) = "=" Then msFormula = Target.Formula Else x = Split(msFormula, "(") formel = x(0) & "(" & Target.Value & ")" f = Evaluate(formel) Target.Formula = f End If End If Set rCalcCell = Nothing End Sub
Nej, det skulle det ikke gerne være for f=evalute(formel) beregner formlen og lægger den nye beregnede værdi i f (target)
Hvis vi sletter evaluate får hele formlen i D2 istedet: Private msFormula As String
Private Sub Worksheet_Change(ByVal Target As Range) Dim rCalcCell As Range Dim x Dim formel As String Set rCalcCell = Range("D2") If Not Intersect(Target, rCalcCell) Is Nothing Then If Left(Target.Formula, 1) = "=" Then msFormula = Target.Formula Else x = Split(msFormula, "(") formel = x(0) & "(" & Target.Value & ")" formel = Replace(formel, ";", ",") Target.Formula = formel End If End If Set rCalcCell = Nothing End Sub
denne kan tage flere parametre. prøv fx med =DATO(2002;1;1) overskrives med 1958;10;5
linien med replace er sat ind så man ikke skal skrive "," mellem parametrene
Hejsan! beklager jeg ikke "svarer" før nu, men wauw en interresant samtale i har haft her, det er sku imponerende, så jeg gir jer begge 15 point for det er også en smule sjovt at læse. Jeg har ikke prøvet det endnu men skal nok lige nå det i næste uge og vende tilbage igen hvis det ikke virker, hvad jeg dog umiddelbart tror at det gør.
pejsen >> Tror måske du skal oprette dit eget spørgsmål, dette spørgsmål er næsten 5½ år gammelt. :-)
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.