Avatar billede dennisa Nybegynder
22. juni 2007 - 08:25 Der er 23 kommentarer og
1 løsning

Automatisk opdatering/udbygning af grafområde og farvning af graf

Spørgsmål 1

En søjlegraf er som udgangspunkt baseret på følgende :

ID  Titel  KPI1  KPI2
A  AM    120  110
B  AM    100    90
C  KAM    150  120

Det er kun ID og KPI resultat som vises i grafen. Grafen ligger p.t. i en skabelon som er afhængig af brugerinput som gør at antallet af rækker kan variere i både opadgående som nedadgående rækker ... hvorefter grafen automatisk skal ændre udsende ( ikke fysisk størrelse ) afhængig af antallet af rækker.

Dette vil jeg gerne gøre via en makro ... men hvordan gøres det ???

Spørgsmål 2

Titel ( AM / KAM ) skal vises med hver sin farve i grafen, således at resultater for AM'er er eksempelvis blå og KAM'er er røde .... i samme makro ...
Avatar billede koppelgaard Praktikant
24. juni 2007 - 16:10 #1
Hej Dennisa.
Hvis du stadig søger hjælp på ovenstående så giv lige i pip, så kan jeg godt skrive et svar til dig. Da jeg ligger i byggerod - kan der godt gå en 4-5 dage.

Michael
Avatar billede dennisa Nybegynder
25. juni 2007 - 10:19 #2
Hej Michael

Arbejdshastigheden er ok !

Jag har ikke fundet nogen løsning endnu
Avatar billede koppelgaard Praktikant
25. juni 2007 - 11:19 #3
Jeg finder et svar :-)

Michael
Avatar billede koppelgaard Praktikant
25. juni 2007 - 12:46 #4
Det ville nok være det nemmeste for mig, hvis du lige sendte Excelmappen.
Kan du gøre det ?
m.koppelgaard@gmail.com
Michael
Avatar billede dennisa Nybegynder
25. juni 2007 - 13:38 #5
Hej Michael

Jeg har ikke noget regneark endnu, så der er frit slag i bolledejen :-)
Avatar billede koppelgaard Praktikant
25. juni 2007 - 13:46 #6
Fedt udtryk !
Men det jeg lige manglede at vide var, om det er A,B,C... der skal være på x-aksen og kp1, kp2 som skal være på på forklaringsteksten.

Endvidere :
Jeg kunne forstille mig, at du vil have grafen til at opdatere automatisk, som følge af tilføjelse af ekstra rækker eller kolonner - er det ikke rigtigt?
Avatar billede dennisa Nybegynder
25. juni 2007 - 13:58 #7
Ja, det er A, B, C ... som skal på X og KPI resultaterne på Y.

Modellen skulle i sin endelige form kunne honorere følgende arbejdsgang :

1. Data udtrækkes fra en given datakilde hvor flere ID / resultater indgår.
2. Slutbruger angiver hvilke ID/resultater der skal visualiseres i en form for stamdataark hvor ID, navn og titel er angivet.
3. Tabellen til brug for grafen opbygges som Lopslag mellem stamdata og data
4. Grafen opdateres med nye data / nye ID

Så du har ret i din endvidere :-)

Jeg havde forestillet mig, at set hele indbygges i en form for rapportgeneratorknap, hvro der skal være en hel masse programkode som aktiveres

Kan du følge mig ?
Avatar billede koppelgaard Praktikant
25. juni 2007 - 18:09 #8
jeps
Avatar billede koppelgaard Praktikant
26. juni 2007 - 20:36 #9
Hej Dinnisa

Her er min kode.
Koden skal lægges i det vindue, der komme frem, når du klikker på det aktuelle sheet(der hvor grafen er) og beder om "vis Programkode".

Const adr = "A1" henviser til øverste venstre hjørne af grafområdet (i ovenstående eksempel "ID")
A1 kan naturligvis ændres.

Jeg har IKKE brugt rødt til KAM data.,
Årsagen er at KP1,KP2,KP3 ... osv allerede lægger beslag på flere farver, og derfor er  det svært at vide, om rødt ikke på et eller andet tidspunkt vil blive taget i brug.
Jeg har derfor valgt at skravere søjlen, og bibeholde den farve, som søjlen i forvejen tildeles af Excel.

Det kan naturligvis ændres.

Jeg ville egentlig helst sende mit ark til dig, så ALLE misforståelser undgås.
Så hvis du har nogen problemer så læg lige din mailadresse - hvis du da ikke helst, vil holde den anonym..

Michael

Const adr = "A1"
Private Sub Worksheet_Change(ByVal Target As Range)
    formatGraf
End Sub
Sub formatGraf()

    Dim rng As Range, idRng As Range
    Dim cht As Chart
   
    Set cht = ActiveSheet.ChartObjects(1).Chart
    Set rng = Range(adr).CurrentRegion
    s = rng.Columns.Count - 2 'antal serier
    r = rng.Columns.Count - 1 'antalrækker
    r1 = rng(1).Row
    r2 = rng(1).Row + rng.Rows.Count - 1
    c1 = rng(1).Column
    c2 = rng(1).Column + rng.Columns.Count - 1
    Set idRng = Range(Cells(r1 + 1, c1), Cells(r2, c1))
   
    Do While cht.SeriesCollection.Count > 0
        cht.SeriesCollection(1).Delete
    Loop
    For serie = 1 To s
        cht.SeriesCollection.NewSeries
        cht.SeriesCollection(serie).Name = Cells(1, serie + 2).Value
        cht.SeriesCollection(serie).XValues = idRng
        cht.SeriesCollection(serie).Values = Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
        For Each c In Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
            punkt = c.Row - r1
            If Trim(UCase(Cells(c.Row, c1 + 1).Value)) = "KAM" Then cht.SeriesCollection(serie).Points(punkt).Fill.Patterned Pattern:=msoPatternWideUpwardDiagonal
        Next
   
    Next serie
   
End Sub
Avatar billede dennisa Nybegynder
27. juni 2007 - 08:20 #10
Hej Michael

Send gerne eksemplet :

DennisAPetersen@ofir.dk
Avatar billede koppelgaard Praktikant
27. juni 2007 - 08:53 #11
ok
Avatar billede dennisa Nybegynder
27. juni 2007 - 09:41 #12
Virker overbevisende :-)

Jeg har besluttet mig for, udelukkende at benytte KPI1 i grafen, da det giver det pæneste/mest sigende resultat, derfor vil jeg kun have to farver ( rød/grøn ) til visualisering af KAM/AM, men jeg vil gerne have den specielle variant hvor der benyttes effekter i farven til at gøre søjlegrafen rund i udseende

Hvor retter jeg koden ?
Avatar billede koppelgaard Praktikant
27. juni 2007 - 15:14 #13
Hej Dennisa
Her er tilrettet kode.

Jeg har sendt et ny ark til dig, med farveprøver.
Så kan du selv justere farve, som du ønsker.
Du skal rette i linierne:
If Trim(UCase(Cells(c.Row, c1 + 1).Value)) = "KAM" Then
                cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 3
            Else
                cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 41
end if

3(rød) og 41(blålig)kan ændres med til andre værdier mellem 1 og 50, som vist i arket.

Michael



Const adr = "A1"
Private Sub Worksheet_Change(ByVal Target As Range)
    formatGraf
End Sub
Sub formatGraf()

    Dim rng As Range, idRng As Range
    Dim cht As Chart
   
    Set cht = ActiveSheet.ChartObjects(1).Chart
    Set rng = Range(adr).CurrentRegion
    s = rng.Columns.Count - 2 'antal serier
    r = rng.Columns.Count - 1 'antalrækker
    r1 = rng(1).Row
    r2 = rng(1).Row + rng.Rows.Count - 1
    c1 = rng(1).Column
    c2 = rng(1).Column + rng.Columns.Count - 1
    Set idRng = Range(Cells(r1 + 1, c1), Cells(r2, c1))
   
    Do While cht.SeriesCollection.Count > 0
        cht.SeriesCollection(1).Delete
    Loop
    For serie = 1 To s
        cht.SeriesCollection.NewSeries
        cht.SeriesCollection(serie).Name = Cells(1, serie + 2).Value
        cht.SeriesCollection(serie).XValues = idRng
        cht.SeriesCollection(serie).Values = Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
        For Each c In Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
            punkt = c.Row - r1
            If Trim(UCase(Cells(c.Row, c1 + 1).Value)) = "KAM" Then
                cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 3
            Else
                cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 41
            End If
           
           
        Next
   
    Next serie
   
End Sub
Avatar billede koppelgaard Praktikant
27. juni 2007 - 15:16 #14
Koden jeg har brugt til at vise far udfra index værdier er
Sub farvevalg()
    On Error Resume Next
    For Each c In Selection
        c.Offset(, 1).Interior.ColorIndex = c.Value
    Next 
End Sub

Du skrive blot en række heltal og markerer dem og sætter makroen i gang (F5).


Michael
Avatar billede dennisa Nybegynder
27. juni 2007 - 15:33 #15
Perfekt ....

For at gøre det superperfekt, har jeg alligevel besluttet at medtage KPI2, men som en udglattet kurve i helt gul ...

Kan du lige klare den også ???
Avatar billede koppelgaard Praktikant
27. juni 2007 - 15:58 #16
mja jeg kan da prøve

Michael
Avatar billede dennisa Nybegynder
27. juni 2007 - 16:01 #17
Jeg har forsøgt at rette/omformattere den efterfølgende, men makroen fejler totalt
Avatar billede dennisa Nybegynder
29. juni 2007 - 08:25 #18
Hej Michael

Du får lige for god ordens skyld dine velfortjente point
Avatar billede koppelgaard Praktikant
29. juni 2007 - 08:47 #19
Hej Dennisa jeg har ikke haft tid.
Sad netop nu og kikkede på det - er du ikke længere interesseret ??

Jeg er ikke gladn før du får et ordentligt produkt !!
Avatar billede dennisa Nybegynder
29. juni 2007 - 08:51 #20
Jo da :-)

Men du har jo reelt løst opgaven som den var defineret - men jo, jeg mangler lige den sidste detalje
Avatar billede koppelgaard Praktikant
29. juni 2007 - 08:53 #21
Du får et svar lidt senere i formiddag.
Jeg hader, hvis det ikke bliver opgaven ikke er fuldført, så godt som muligt.

Michael
Avatar billede dennisa Nybegynder
29. juni 2007 - 08:57 #22
Kender det :-)
Avatar billede koppelgaard Praktikant
29. juni 2007 - 10:07 #23
Hej Dinnisa
Jeg håber dette svarer til, hvad du ønsker.
Jeg har også sendt en fil.
Michael

Michael
Const adr = "A1"
Private Sub Worksheet_Change(ByVal Target As Range)
    formatGraf
End Sub
Sub formatGraf()

    Dim rng As Range, idRng As Range
    Dim cht As Chart
    On Error Resume Next
   
    Set cht = ActiveSheet.ChartObjects(1).Chart
    Set rng = Range(adr).CurrentRegion
    s = rng.Columns.Count - 2 'antal serier
    r = rng.Columns.Count - 1 'antalrækker
    r1 = rng(1).Row
    r2 = rng(1).Row + rng.Rows.Count - 1
    c1 = rng(1).Column
    c2 = rng(1).Column + rng.Columns.Count - 1
    Set idRng = Range(Cells(r1 + 1, c1), Cells(r2, c1))
   
    Do While cht.SeriesCollection.Count > 0
        cht.SeriesCollection(1).Delete
    Loop
   
    cht.ChartType = xlColumnClustered
    cht.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="Kurve - søjle"
    For serie = 1 To s
        cht.SeriesCollection.NewSeries
        cht.SeriesCollection(serie).Name = Cells(1, serie + 2).Value
        cht.SeriesCollection(serie).XValues = idRng
        cht.SeriesCollection(serie).Values = Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
    Next serie
   
    cht.ApplyCustomType ChartType:=xlBuiltIn, TypeName:="Kurve - søjle"
    cht.SeriesCollection(2).Smooth = True
    For serie = 1 To s
        For Each c In Range(Cells(r1 + 1, serie + 2), Cells(r2, serie + 2))
            punkt = c.Row - r1
            If serie = 2 Then
                If Trim(UCase(Cells(c.Row, c1 + 1).Value)) = "KAM" Then
                    cht.SeriesCollection(serie).Points(punkt).MarkerForegroundColorIndex = 3
                    cht.SeriesCollection(serie).Points(punkt).MarkerBackgroundColorIndex = 3
                Else
                    cht.SeriesCollection(serie).Points(punkt).MarkerForegroundColorIndex = 41
                    cht.SeriesCollection(serie).Points(punkt).MarkerBackgroundColorIndex = 41
                End If
            End If
            If serie = 1 Then
             
                If Trim(UCase(Cells(c.Row, c1 + 1).Value)) = "KAM" Then
                    cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 3
                Else
                    cht.SeriesCollection(serie).Points(punkt).Interior.ColorIndex = 41
                End If
            End If
           
        Next
   
    Next serie
   
   
End Sub
Avatar billede dennisa Nybegynder
29. juni 2007 - 10:35 #24
Jeg kigger lige på det. Foreløbig tak :-)
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