Avatar billede kmjk Nybegynder
17. december 2002 - 09:49 Der er 19 kommentarer og
2 løsninger

formel ændring i vba

Jeg ønsker at lave en makro, som kan ændre nogle formler for mig.
Det er et stort budgetskema, som henter tal fra andre regneark.

Jeg ønsker at makroen skal ændre de steder hvor der henvises til ".....service'!??"

Formlen skal ændres så at kolonnen bliver beregnet ud fra hvor jeg står i øjeblikket og den skal bibeholde den række som står i formlen i forvejen.

Kolonnen skal beregnes således:
((kolonne-1)*2)+1)


Makroen skal kun ændre i den aktuelle celle
Avatar billede Slettet bruger
17. december 2002 - 11:40 #1
Hvordan ser den eksisterende formel ud ?
Avatar billede kmjk Nybegynder
17. december 2002 - 11:56 #2
eks. C6
=[hvidovrenorden.XLS]Total!C10+[hvidovrekontinent.xls]Total!C10+'[hvidovrelogistik.xls]service afd.'!E14

Regnearket er bygget om med Beskrivelse i kollone A, tal fra Januar i B, februar i C osv.

service afd. har tal i januar i c, februar i E
Avatar billede Slettet bruger
17. december 2002 - 12:41 #3
Dvs. at referencer til kolonne E skal ændres til kolonne I ?
jf.
((kolonne-1)*2)+1)
Avatar billede kmjk Nybegynder
17. december 2002 - 12:49 #4
Ja det er korrekt
Det der står i c6 er efter ændring:
=[hvidovrenorden.XLS]Total!C10+[hvidovrekontinent.xls]Total!C10+'[hvidovrelogistik.xls]service afd.'!E14

Tilsvarende i d6
=[hvidovrenorden.XLS]Total!d10+[hvidovrekontinent.xls]Total!d10+'[hvidovrelogistik.xls]service afd.'!g14
Avatar billede kmjk Nybegynder
17. december 2002 - 13:05 #5
Jeg fandt selv en løsning.
Det er ikke kønt, men det virker.

Jeg måtte ændre formlerne så der stod $E. -> Kan man ikke fjerne mit søgefelt + kolonnebetegnelsen

Hvordan undgår jeg "select", den burde kunne laves med en LOOKUP eller lign.
Jeg syntes det er besværlig at referere til de rigtige celler

Forslag til forbedringer ønskes
ActiveCell.Select
    Set celle = ActiveCell.Offset(0, 0).Range("A1")
    formel = ActiveCell.Formula
    soeg = "service afd.'!$E"
    kolonne = celle.Column
    kolonne = ((kolonne - 1) * 2) + 1
    Select Case kolonne
        Case 1
            kolonne = "A"
        Case 2
            kolonne = "B"
        Case 3
            kolonne = "C"
        Case 4
            kolonne = "D"
        Case 5
            kolonne = "E"
        Case 6
            kolonne = "F"
        Case 7
            kolonne = "G"
        Case 8
            kolonne = "H"
        Case 9
            kolonne = "I"
        Case 10
            kolonne = "J"
        Case 11
            kolonne = "K"
        Case 12
            kolonne = "L"
        Case 13
            kolonne = "M"
        Case 14
            kolonne = "N"
        Case 15
            kolonne = "O"
        Case 16
            kolonne = "P"
        Case 17
            kolonne = "Q"
        Case 18
            kolonne = "R"
        Case 19
            kolonne = "S"
        Case 20
            kolonne = "T"
        Case 21
            kolonne = "U"
        Case 22
            kolonne = "V"
        Case 23
            kolonne = "W"
        Case 24
            kolonne = "X"
        Case 25
            kolonne = "Y"
        Case 26
            kolonne = "Z"
        End Select
   
    ny = "service afd.'!" & kolonne
   
    formel2 = Replace(formel, soeg, ny)
    ActiveCell.Formula = formel2
Avatar billede martin_moth Mester
17. december 2002 - 13:13 #6
Når man først ved hvad der skal ændres i formlerne (det ved jeg ikke), er det blot at lave en løkke, der gennemgår samtlige celler der ønskes ændret, og udskifter teksten

Her et eksempel:
Celle A1 indeholder : julen er dejlig
Celle A2 indeholder : det er snart påske
Celle A3 indeholder : bla bla

Kører du macroen Udskift_påske_til_jul, vil indholdet skifte til

Celle A1 indeholder : julen er dejlig
Celle A2 indeholder : det er snart jul
Celle A3 indeholder : bla bla

Idet Udskift_påske_til_jul:

Sub Udskift_påske_til_jul()
  Dim RækkeNr As Long
  Dim KolonneNr As Integer
  Dim gammelFormel As String
  Dim nyFormel As String
  KolonneNr = 1 '=Kolonne A
  For RækkeNr = 1 To 3 'Række 1 til 3
    gammelFormel = Worksheets("Ark1").Cells(RækkeNr, KolonneNr).FormulaR1C1
    If InStr(1, gammelFormel, "påske") > 0 Then
      nyFormel = Replace(gammelFormel, "påske", "jul", , , vbTextCompare)
      Worksheets("Ark1").Cells(RækkeNr, KolonneNr).FormulaR1C1 = nyFormel
    End If
  Next RækkeNr
End Sub

Ovenstående macro er lige til at rette i, så det passer specifikt til dit behov - jeg ved ikke hvilke celler du vil udskifte, samt hvad du vil udfskifte - men som sagt - det er bare at tilpasse macroen:o)
Avatar billede martin_moth Mester
17. december 2002 - 13:18 #7
PS: I din egen løsning (som du postede efter jeg havde påbegyndt mit svar, og som jeg derfor ikke havde set da jeg svarede), har du en Select Case på en halv meter, som du kan slette og erstatte med følgende kode:

  kolonne = Chr(64 + kolonne)

Det er lidt simplere :)
Avatar billede kmjk Nybegynder
17. december 2002 - 13:20 #8
Jeg skal have beregnet kolonnen udfra den kolonne jeg står i.
Fjernet "kolonnen" fra formlen og indsat den nye
Avatar billede Slettet bruger
17. december 2002 - 13:39 #9
Du kan også prøve med

------------------------
adr = ActiveSheet.Cells(1, kol).Address(False, False)
kol = Left(adr, 1)
------------------------

Med adr = 9, vil du få kol = I
Avatar billede Slettet bruger
17. december 2002 - 13:40 #10
Rettelse:

---------
kolnr = 9
adr = ActiveSheet.Cells(1, kol).Address(False, False)
kolnavn = Left(adr, 1)
---------

Med kolnr = 9, vil du få kolnavn = I
Avatar billede Slettet bruger
17. december 2002 - 13:41 #11
Rettelse til rettelse  :-)

--------
kolnr = 9
adr = ActiveSheet.Cells(1, kolnr).Address(False, False)
kolnavn = Left(adr, 1)
---------
Avatar billede softcareconsult Nybegynder
17. december 2002 - 13:43 #12
Følgende har to begrænsninger (som jeg tror du kan leve med)
Antagelse 1: service afd.'!  forekommer kun en gang pr formel
Antagelse 2: Du kommer ikke længere ud end kolonne Z

Sub RetFormel()
  Range("C6").Select
  Selection.CurrentRegion.Select
  'søger for at alle celler, der "støder op til" "C6" blive gennemsøgt
  For Each cl In Selection.Cells
    s = cl.Formula
    txt = "service afd.'!"
    lng = Len(txt)
    If Left(s, 1) = "=" Then
      i = Application.WorksheetFunction.Search(txt, s)
      If i > 0 Then
        c = Chr((cl.Column - 1) * 2 + Asc("A"))
        cl.Formula = Left(s, i + lng - 1) & c & Right(s, Len(s) - i - lng)
      End If
    End If
  Next
End Sub
Avatar billede kmjk Nybegynder
17. december 2002 - 13:48 #13
- Antagelse 1: service afd.'!  forekommer kun en gang pr formel
Dette er ikke korrekt, den kan forekomme flere gange pr formel, i øjeblikket 6 gange nogle steder

- Selection.CurrentRegion.Select
-  'søger for at alle celler, der "støder op til" "C6" blive gennemsøgt
Hvad hvis der ikke står noget i d6, men i e6
Avatar billede kmjk Nybegynder
17. december 2002 - 14:04 #14
Den brager ned på denne linie
  i = Application.WorksheetFunction.Search(txt, s)

Run-time error '1004':
Kan ikke angive egenskaben Search for klassen WorksheetFunktion
Avatar billede martin_moth Mester
17. december 2002 - 14:54 #15
Nu spørger jeg lige forsigtigt: Du vil have udskiftet en del af indholdet i nogle celler med et andet indhold. Jeg har lavet en sub der kan præcis det. Hvad er problemet? :o)
Avatar billede kmjk Nybegynder
17. december 2002 - 15:05 #16
Den skal kunne ændre en formel. Hvor den finder "service afd.'!" + kolonnen og erstatter den med en "service afd.'!" + en ny beregnet kolonne

Dette skal den gøre i den aktive celle (gerne et range), og den skal være i stand til at finde op til 6 forekomster i den samme formel

Softcareconsult har næsten lavet løsningen, men den kan kun finde 1 forekomst i hver formel og den brager ned i sidste del af det markerede.

Din løsning kan jeg ikke umiddelbart få til at virke, men det kan jo være mine begrændsede evner.
Avatar billede Slettet bruger
17. december 2002 - 15:08 #17
Havde du ikke selv noget der virkede, omend med en kringlet Select sætning ?

Select kan erstattes med det som jeg foreslog i 17/12-2002 13:41:09.
Avatar billede martin_moth Mester
17. december 2002 - 15:13 #18
Eller select kan erstattes som jeg foreslog 17/12-2002 13:18:08 :o)

Som sagt, mener jeg min macro kan det du ønsker, du skal bare rette lidt i den. Nå, over and out...
Avatar billede kmjk Nybegynder
17. december 2002 - 15:22 #19
Lad os få lukket spørgsmålet
Avatar billede kmjk Nybegynder
17. december 2002 - 15:23 #20
Tak for hjælpen
Avatar billede softcareconsult Nybegynder
17. december 2002 - 15:28 #21
Hvis du vil have, jeg arbejder lidt videre med løsningen, skriv din email.
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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