Avatar billede per_thorndal Nybegynder
28. februar 2006 - 14:09 Der er 6 kommentarer og
1 løsning

Opsplitte formel i elementer

Jeg har en formel, som f.eks. hedder:

=+Ark2!B3+Ark3!B4+Ark3!C13-Ark3!C25
værdien heraf er 113.

Jeg kunne godt tænke mig en makro, som gør følgende:

- curseren står i cellen med formelen, når jeg starter makroen:

I et nyt regneark skal den vise elementerne i formlen således:
Element                          værdi
=+Ark2!B3+Ark3!B4+Ark3!C13-Ark3!C25    113
+Ark2!B3                            10
+Ark3!B4                                  13
+Ark3!C13                            500
-Ark3!C25                          -410

I princippet skal den opdele formlen i et element for hver gang et af de fire regneelementer optræder +-* eller /

Er der nogen, som har en god løsning herpå ?

mvh og tak
Per
Avatar billede supertekst Ekspert
28. februar 2006 - 15:06 #1
Sub opdel()
Dim f, lgd, rk, count, flag As Boolean
    rk = 3
    flag = True
    f = 1
   
    formel = Mid(Cells(1, 1).Formula, 2)
   
    While formel <> ""
        If InStr("+-*/", Mid(formel, f, 1)) > 0 Then
            If flag = True Then
                flag = False
            Else
                Cells(rk, 1) = "'" + Mid(formel, 1, f - 1)
                Cells(rk, 2) = "=" + Mid(formel, 1, f - 1)
               
                formel = Mid(formel, f)
                rk = rk + 1
                f = 1
            End If
        End If
        f = f + 1
    Wend
   
End Sub
Avatar billede supertekst Ekspert
28. februar 2006 - 15:20 #2
En lille justering af 7. linie: (så formelcellen er vilkårlig)

    formel = Mid(ActiveCell.Formula, 2)
Avatar billede per_thorndal Nybegynder
28. februar 2006 - 15:33 #3
smukt - et lille men

kan man lave det således, at man står i for eksempel regneark XY, ark2, celle G5 - herefter opretter makroen et nyt regneark og kopiere formlen over i ark1 celle A1 - med de oprindelige referencer - inden ovenstående makro kører ?
Avatar billede per_thorndal Nybegynder
28. februar 2006 - 15:44 #4
Har løst det selv med tre nye linier før "While formel <> ""

    Workbooks.Add
    Cells(rk - 2, 1) = "'" + formel
    Cells(rk - 2, 2) = "=" + formel

Send et svar !
Avatar billede supertekst Ekspert
28. februar 2006 - 17:21 #5
Ok - Der skulle være et svar i forbindelse med mit første indlæg.
Avatar billede per_thorndal Nybegynder
01. marts 2006 - 22:23 #6
Har måtte justere lidt på den - da den ikke virker, når der er * eller / i en formel. Har stadig problem med paranteser. Men det må kunne finjusteres.

Sub OpdelFormel()
Dim f, lgd, rk, cl, count, flag As Boolean
    rk = 1000
    cl = 1
    flag = True
    f = 1
   
formel = Mid(ActiveCell.Formula, 2)
'    Workbooks.Add
    Cells(rk, cl + 2) = "'" + formel
    Cells(rk, cl + 1) = "=" + formel
    rk = rk + 1
    While formel <> ""
        If InStr("+-*/", Mid(formel, f, 1)) > 0 Then
            If flag = True Then
                flag = False
            Else


                Cells(rk, cl + 2) = "'" + Mid(formel, 1, f - 1)
                Cells(rk, cl) = "'" + Mid(formel, 1, 1)
                Cells(rk, cl + 1) = "=" + Mid(formel, 2, f - 2)
               
                formel = Mid(formel, f)
                rk = rk + 1
                f = 1
            End If
        End If
        f = f + 1
    Wend
   
    Application.Goto Reference:="R1000C1"
End Sub
Avatar billede per_thorndal Nybegynder
01. marts 2006 - 22:49 #7
Eksempel, som virker med paranteser:

Sub OpdelFormel_parantes()
Dim f, lgd, rk, cl, count, flag As Boolean
    rk = 1000
    cl = 1
    flag = True
    f = 1
   
formel = Mid(ActiveCell.Formula, 2)
'    Workbooks.Add
   
    Cells(rk, cl + 2) = "'" + formel
    Cells(rk, cl + 1) = "=" + formel
    rk = rk + 1
formel = Replace(formel, "(", "", 1, -1)
formel = Replace(formel, ")", "", 1, -1)

    While formel <> ""
        If InStr("+-*/", Mid(formel, f, 1)) > 0 Then
            If flag = True Then
                flag = False
            Else


                Cells(rk, cl + 2) = "'" + Mid(formel, 1, f - 1)
                Cells(rk, cl) = "'" + Mid(formel, 1, 1)
                Cells(rk, cl + 1) = "=" + Mid(formel, 2, f - 2)
               
                formel = Mid(formel, f)
                rk = rk + 1
                f = 1
            End If
        End If
        f = f + 1
    Wend
   
    Application.Goto Reference:="R1000C1"
End Sub
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester