Avatar billede Nikolaj_IP Juniormester
18. juli 2017 - 11:33 Der er 12 kommentarer og
1 løsning

Dynamisk tilføjelse til formel / Dynamisk søg og erstat

Hejsa,

Jeg sidder med en række formler (flere tusind), der skal udvides/ændres på, men er kommet i tvivl om, hvordan det gøres lettest/smartest.

Alle formlerne ligner følgende:
=C5+D5-S5
Men nogle af dem har også noget mere efter denne grundlæggende formel f.eks.:
=C829+D829-S829+T834+T835+T835+(T836*2)

Jeg kunne godt tænke mig:
=C5+D5+E5+F5+G5+H5-S5
Eller
=SUM(C5:H5)-S5
Men hvor jeg beholder det der evt. må være ekstra efter -S5

Der er selvfølgelig tale om mange rækker (ikke kun række 5).

Tænker det ikke burde være så svært, men kan ikke rigtig finde en løsning. Har prøvet med noget søg og erstat uden det store held.

Håber i har nogle ideer!

Mvh Nikolaj.
Avatar billede acore Ekspert
18. juli 2017 - 12:01 #1
Du kan komme nogen vej med regular expressions i dine søg/erstat.

Fx kan du søge efter

Cx+Dx+Ex+Fx+Gx-Hx-yyy

og erstatte det med

SUM(Cx:Hx)-yyy

i alle rækker.

Men der ER grænser for hvor generisk, du kan gøre det.

Prøv evt at se på http://www.codedawn.com/excel-add-ins.php

Hvis du ikke kender til regular expressions, så kik på nogle af de mange tutorials, der findes. Ideen er, at du kan bruge "placeholders" i dine søg og erstat - så du kan bevare rækkenumrene.
Avatar billede finb Ekspert
18. juli 2017 - 12:02 #2
skriv i en ny kolonne:
= nuværende formel - (C5+D5-S5) + (C5+D5+E5+F5+G5+H5-S5)
Avatar billede Nikolaj_IP Juniormester
18. juli 2017 - 12:59 #3
#1 Mange tak for dit svar. Håbede lidt på en løsning, der kunne klares rent i Excel (uden brug af addons/-ins), men kommer der ikke andet, vil jeg da give det et skud. Kender godt til konceptet med regex, men har ikke nogen erfaring med brug af det.

#2 Mange tak for svaret. Formlen jeg skal have udbygget skal dog "stå og arbejde" og kan ikke bare konverteres til en værdi efterfølgende, muligvis udvides igen senere hen, så det går ikke rigtig at trække formlen fra sig selv. Jeg vil gerne have udvidet den i forvejen eksisterende/ændret den, jeg har ikke rigtig mulighed for at opbygge en ny med den nuværende i... Hvis det giver mening.

Tak for jeres input, håber dog stadig på en løsning der ligger lidt mere lige til/passer lidt bedre til lige netop min problemstilling.

Jeg bruger desuden Excel 2016 64-bit. Har lidt erfaring efterhånden med VBA, så måske man kunne angribe det den vej.
Avatar billede acore Ekspert
18. juli 2017 - 13:07 #4
Det kan godt klares uden add-on. I excel har du kun adgang til regexp via vba/makroer, så du skal kode det selv - det behøver ikke være kompliceret. Se fx http://analystcave.com/excel-regex-tutorial/ for inspiration.

Jeg har ikke andre vinkler på en løsning, end regexp.
Avatar billede Nikolaj_IP Juniormester
18. juli 2017 - 13:09 #5
#1 Downloadede og installerede det efter hjemmesidens instruktioner, men kan ikke få det til at virke, bliver oversvømmet af errors. Kan se, det sidst er opdateret i 2011 eller noget i den dur, og at der var 64-bit problemer med Office 2010, så tænker at jeg med 2016 OG 64-bit udgaven af Excel nok presser kompabiliteten lidt for langt. Desværre.
Avatar billede acore Ekspert
18. juli 2017 - 13:13 #6
Hmm - så var det ikke et ret godt råd - have ikke testet det. Men mon ikke nemt du kan finde en regexp/search-replace til Excel, der virker - hvis det er vejen, du vil.
Avatar billede Mads32 Ekspert
18. juli 2017 - 13:44 #7
Hej
Hvis jeg har forstået problemet rigtig, burde nedenstående kunne bruges.

Hvis din oprindelige formel som udfører beregningerne for række 5, står i kolonne A, så kan du i kolonne B(hvis den er fri) skrive følgende formel =A5+sum(E5:H5)
Avatar billede Nikolaj_IP Juniormester
18. juli 2017 - 13:50 #8
#4 / #6 Tak for linket, og jo, dine råd er meget værdsatte - havde jeg kørt med en ældre Excel version, kunne det have været løsningen. Synes ikke liiiige det er til at finde et andet (gratis) tool/addin/addon, så VBA bliver måske løsningen. Nu får vi se.
Tak for dit input i hvert fald! :)

#7 Tak for dit svar. Det løser det ikke lige for mig, da jeg ikke har så meget "plads" at arbejde med. Jeg skal have ændret den i forvejen eksisterende formel, den du antager står i A, jeg kan ikke lave en ny og placere den i B.
Avatar billede acore Ekspert
18. juli 2017 - 14:16 #9
http://www.thefoolonthehill.net/drupal/content/essential-excel-add-help

Denne gang må jeg hellere indrømme med det samme, at jeg ikke har testet det, men det ser rigtigt ud.
Avatar billede excelent Ekspert
18. juli 2017 - 18:44 #10
Hvis din angivelse af bestående formler passer, at der fx er en højre el. venstre parentes ude til højre, så kan du prøve denne kode "på en kopi naturligvis"

Tildel koden en genvejs tast, placer markør i den første celle i kol A og kør via genvejstasten en celle ad gangen.

Sub test1()

x = ActiveCell.Formula

y = InStr(1, x, "-")
Z = InStr(y, x, "+")
v = Right(x, Len(x) - Z + 1)
If InStr(1, x, "(") Then
ActiveCell.Formula = "=sum(C" & ActiveCell.Row & ":H" & ActiveCell.Row & ")-S" & ActiveCell.Row & v
Else
ActiveCell.Formula = "=sum(C" & ActiveCell.Row & ":H" & ActiveCell.Row & ")-S" & ActiveCell.Row
End If

ActiveCell.Offset(1, 0).Select

End Sub
Avatar billede Mads32 Ekspert
18. juli 2017 - 21:05 #11
Hej Nicolai_IP

Jeg forstår ikke din bemærkning i #8, om "ikke har så meget "plads" - exel har 16384 kolonner.

Ved siden af den kolonne hvor dine nuværende/eller rettede beregninger står, kan du blot indsætte en kolonne. Alle dine eksisterende formler retter sig automatisk da du jo ikke har anvendt $-tegn i dine formler.

I den nye kolonne indsættes så en formel som foreslået i #7
Avatar billede Nikolaj_IP Juniormester
19. juli 2017 - 08:58 #12
#9 Kigger på det - tak igen.

#10 Tak for svaret - arbejder allerede i en kopi af det originale ark, en lektie man lærer hurtigt, når man leger med VBA. ;) Giver din kode et skud lidt senere, skal lige prøve det jeg selv har leget lidt med.

#11 Med plads mener jeg, at jeg har fyldte kolonner på begge sider af den pågældende kolonne med formlen. Der kører en masse VBA kode og denne retter sig desværre ikke automatisk (og $ er brugt i visse andre kolonner) - sidst der skulle flere kolonner ind, tog det en halv dags tid at rette VBA koden til, det er et voldsomt stort ark.
Avatar billede Nikolaj_IP Juniormester
19. juli 2017 - 12:47 #13
Så fandt jeg ud af det - det blev en VBA løsning med brug af For Each og Replace.

Jeg siger tak for alle kommentarerne! :)

Her er koden:
Sub RPLF()
    Dim idr As Range
    Dim crp As Double
    Dim lrp As Double
    Dim form As String
    Dim newform As String

    crp = 4

    With Worksheets("S-S")
        lrp = .Cells(.Rows.Count, "A").End(xlUp).row
    End With

    For Each idr In Range("A4:" & "A" & lrp)
        crp = crp + 1
        form = Worksheets("S-S").Range("T" & crp).Formula
        newform = Replace(form, "=C" & crp & "+D" & crp & "-S" & crp, "=SUM(C" & crp & ":H" & crp & ")-S" & crp)
        Worksheets("S-S").Range("T" & crp).Formula = newform
    Next
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

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