14. marts 2018 - 07:54Der er
4 kommentarer og 2 løsninger
Farve på punkter i punktdiagram udfra farven på font i felt
Hej,
Jeg har et Excel-ark. I kolonne A (DB) skal data automatisk plottes ind i et punkt-diagram på Y-aksen, og data i kolonne B (DG) skal på X-aksen.
Sådan at du får EN markering pr linie.
Derudover skal markeringen i punkt-diagrammet gerne have farve efter værdien (score) i kolonne C. Denne kolonne har 4 muligheder for farveudfald, og værdierne i feltet farves pt. alt efter hvilket interval de rammer.
Farven i cellerne er et format, og et diagram ser kun på værdierne i cellerne, ikke på disses format, så her skal du nok ud i noget VBA, der ændrer farverne vpå punkterne i diagrammet, når først dette er oprettet.
Den skal du så "bare" gennemløbe for alle punkterne i diagrammet (i stedet for (1), samtidigt med at du sammenligner med farven i den celle, hvor data kommer fra og sætter denne ind i stedet for 7. Desværre ikke en helt ligetil opgave.
Tak for dine input :-) Er glad for der findes folk som dig, der gerne vil hjælpe til. Jeg har rodet lidt videre med det, og her min løsning til brug for evt andre, som finder denne tråd og har samme udfordring:
Jeg indsatte koden her via VBA.
Det kræver at diagrammet som du vil køre det på markeres i Excel hvorefter du kører makroen (selve dette kan man så lave en ny makro som gør og koble på en knap eller lignende som brugeren kan benytte), den vil herefter opdatere punkt-farven på diagrammet efter baggrundsfarven på cellen data kommer fra :-) VIGTIGT denne baggrundsfarve på cellen skal sættes manuelt, den kan ikke komme fra f.eks betinget formatering.
Sub color_Graph() Dim ss As Series Dim sc As SeriesCollection Dim ch As Chart Dim rng As Range Dim datapoint As Point Dim i As Integer Dim add As String Dim var, var3 As Variant
Set ch = ActiveChart Set sc = ch.SeriesCollection 'clear auto filling For i = 1 To sc.Count sc(i).Interior.Color = -2 Next i i = 0 For Each ss In ch.SeriesCollection 'retreive range for each series add = ss.Formula var = Split(add, ",") var3 = Split(var(2), "!") var3 = Replace(var3(1), "$", "") Set rng = Range(var3) For Each datapoint In ss.Points i = i + 1 'cell number in series datapoint.Format.Fill.BackColor.RGB = rng(i).Interior.Color 'fill data point with cell color ch.Refresh 'refresh table Next datapoint i = 0 'restart count for cells in series Next ss
og hvis det skal løses med automatisk baggrundsfarve af felterne, skal noget lignende dette køres oveni:
Sub ColorMe() Dim i As Long, r1 As Range, r2 As Range
For i = 5 To 34 Set r1 = Range("X" & i & ":X" & i) Set r2 = Range("G" & i & ":G" & i) If r1.Value = 1 Then r2.Interior.Color = vbBlue If r1.Value = 2 Then r2.Interior.Color = vbGreen If r1.Value = 3 Then r2.Interior.Color = vbYellow If r1.Value = 4 Then r2.Interior.Color = vbRed Next i End Sub
hvor du via f.eks en "Hvis" formel får defineret en seperat range (ovenfor 1 til 4) som svarer til den værdi som feltet der skal farves har. Så kan man slå op på værdien (f.eks 1 og automatisk farve det ønskede felt blå). Ovenfor har jeg min range som der slåes op på for farveregel i kolonnen X og rangen som skal farves herefter i kolonnen G.
Tak for den samlede løsning. Harc desværre ikke tid pt. til at udvikle de store løsninger :-)
Synes godt om
Ny brugerNybegynder
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.