Avatar billede celador Nybegynder
22. februar 2012 - 16:29 Der er 8 kommentarer og
1 løsning

Merged celler og håndtering af værdien

Hej Eksperten.dk,

jeg sidder med et mindre excel problem. Det er handler om værdier og merged celler. Jeg har nogle årsoversigter hvor forskellige aktiviteter figurerer henad, hvor rækkerne angives i måneder og uger.

Værdierne skal så summeres i forhold til måneder, men aktiviteter der eksempelvis går fra uge 1-6 har en samlet værdi, men kun den del af værdien der tilører januar er relevant for januar. Altså ikke hele værdien for cellen, men eksempelvis 4/6 af værdien. Ugernes tilhørsforhold bestemmes af forholdet af flertallet af dage, indeholder ugen eksempelvis 5 dage i januar og 2 i februar, tælles hele ugen med i januar.

Men der er sådan set hele opgaven.

I første omgang tænkte jeg at blot unmerge cellerne og kopiere værdien ud i alle de nye mindre celler og herefter dele den med antallet af celler. En mindre kompleks tilgang til løsningen, og del-automatisk i stedet for fuldautomatisk.

Jeg kan dog ikke finde en brugbar løsning på at kopiere værdien ud i de nye celler efter unmerge.

Håber der er nogle der har et forslag? og at beskrivelsen giver mening.
Avatar billede supertekst Ekspert
22. februar 2012 - 18:09 #1
I givet fald kan antal dage udregnes helt præcist ved at udregne "kalenderfunktioner" via VBA..
Avatar billede celador Nybegynder
23. februar 2012 - 11:47 #2
Ja, var også ude i at opsætte en løsning der anvendte kalenderfunktionen, men i første omgang skal jeg håndtere værdierne fra de sammenslåede (merged) cells.

Hvis eksempelvis A3:F3 er en merged cell, så opfatter excel kun værdien og cellen A3. For at komme videre skal jeg have en løsning der kan registrere at A3:F3 er en merged cell og unmerge cellen og efterfølgende kopiere den orginale værdi ud på de nye unmerged cells. Da værdien kun vil fremkomme i A3 og B3:F3 vil være tomme.

Ideelt set ville jeg have excel til at dele den oprindelige værdi med antallet af celler og indsætte denne i de nye celler. Altså hvis den oprindelige værdi var 120 i den A3:F3 merged celle, så skulle excel unmerge denne til 6 indviduelle celler og give dem værdien 20 (120 / 6).

Kalenderfunktionen vil først blive aktuel i en løsning der efterfølgende kan allokere hvilken måned de enkelte uger tilhører.

Mange tak for input og håber der er flere som kan være behjælpelige :)
Avatar billede celador Nybegynder
24. februar 2012 - 09:04 #3
Sub unmerge()

Dim SamletCelle As Range, NyeCeller As Range

With ThisWorkbook.Sheets("2012")
   
    For Each SamletCelle In .UsedRange

        If SamletCelle.MergeCells Then

            Set NyeCeller = SamletCelle.MergeArea

            SamletCelle.unmerge
           
            NyeCeller.Value = SamletCelle.Value

        End If

End With

End Sub


-----------

Med ovenstående kode har jeg nu fået excel til at splitte merged cells og kopiere den originale værdi ud til de nye celler. Nu mangler jeg dog at tilføje lidt fleksibilitet, så at den også kan tælle antallet af nye celler. Nogen idé til hvordan jeg løser dette?
Avatar billede kabbak Professor
24. februar 2012 - 09:15 #4
jeg er ikke helt sikker på hvad du mener, men denne kode trækker data ud fra merged celler i ark 2012 og skriver dem i samme adresser på aktive ark.


Sub test()
    Dim SamletCelle As Range
    With ThisWorkbook.Sheets("2012")
        For Each SamletCelle In .UsedRange
            If SamletCelle.MergeCells Then Range(SamletCelle(1, 1).Address).Value = SamletCelle(1, 1)
        Next
    End With

End Sub
Avatar billede celador Nybegynder
28. februar 2012 - 08:52 #5
Tak for svaret Kabbak.

Jeg har lavet følgende kode, men kan ikke få den til at springe over celler der ikke indeholder tal, altså merged celler med tekst.

Det er sikkert langt fra den mest optimale kodning, men det virker. Sort of :D

Den kopierer nu det orginale ark, beder brugeren om at identificere området indeholdende tal der skal deles, og undersøger herefter dette område for merged celler. Den tæller hvor mange celler en merged celle består af og deler det samlede beløb med dette. Så ledes værdien allokeres korrekt. Problemet er dog stadig at den også ændrer celler med tekst?

Jeg er ret sikker på det er fordi jeg ikke helt forstår håndteringen af range. Håber du/i kan være behjælpelige på mit storm p projekt :)


Sub unmerge()

Dim SamletCelle, AngivRange, NyeCeller As Range, Antal As Integer, Beloeb
   
    Sheets("2012").Select
    Sheets("2012").Copy Before:=Sheets(2)
       
        Application.DisplayAlerts = False

            Set AngivRange = Application.InputBox(Prompt:= _
                "Marker alle de budgetter du ønsker delt.", _
                    Title:="Vælg data", Type:=8)

    For Each SamletCelle In AngivRange

        If SamletCelle.MergeCells Then

            Set NyeCeller = SamletCelle.MergeArea
           
            Beloeb = SamletCelle.Value
           
            Antal = NyeCeller.Columns.Count
           
                If IsNumeric(Beloeb) Then
               
            SamletCelle.unmerge
           
            NyeCeller.Value = Beloeb / Antal
           
            Else
           
            Beloeb = "Not number"
                End If
           
        End If
   
    Next SamletCelle

End Sub
Avatar billede kabbak Professor
28. februar 2012 - 18:22 #6
For Each SamletCelle In AngivRange

        If SamletCelle.MergeCells Then

            Antal = NyeCeller.Columns.Count

            If IsNumeric(Trim(SamletCelle(1, 1))) Then    ' i en merged celle er værdien altid i (1, 1), så man behøver ikke at unmerge
                Beloeb = Val(Trim(SamletCelle(1, 1)))

                ' NyeCeller.Value = Beloeb / Antal' forstår ikke lige meningen

            Else

                Beloeb = "Not number"
            End If

        End If

    Next SamletCelle
Avatar billede kabbak Professor
28. februar 2012 - 18:23 #7
For Each SamletCelle In AngivRange
        If SamletCelle.MergeCells Then
            Antal = SamletCelle.Columns.Count
            If IsNumeric(Trim(SamletCelle(1, 1))) Then    ' i en merged celle er værdien altid i (1, 1), så man behøver ikke at unmerge
                Beloeb = Val(Trim(SamletCelle(1, 1)))
                ' NyeCeller.Value = Beloeb / Antal' forstår ikke lige meningen
            Else
                Beloeb = "Not number"
            End If
        End If
    Next SamletCelle
Avatar billede celador Nybegynder
29. februar 2012 - 11:29 #8
Mange tak Kabbak.

Trim funktionen var lige hvad jeg manglede, og tak for dine kommentarer. Beloeb / Antal bruger jeg til at angive den opdelte værdi til de nye celler. Altså hvis der stod 1 million i en merged celle der "fyldte" 4 celler, så vil der nu stå 250k i hver af de fire nye celler.

Du må meget gerne smide et svar, og endnu en gang tusind tak for hjælpen! :)
Avatar billede kabbak Professor
02. marts 2012 - 16:15 #9
;-))
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