• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Scatter grafiek 'automatisch' vulllen

Status
Niet open voor verdere reacties.

janklaasdiederi

Gebruiker
Lid geworden
16 mrt 2006
Berichten
55
Ik ben op zoek naar een manier om automatisch, wellicht mbv macro/VBA grafieken te vullen.

We hebben een lijst met boot-namen, waarbij diverse specificaties horen die we met elkaar willen vergelijken en weergeven in een scatter diagram. Hierbij moeten de boten dus een aparte kleur krijgen zodat ze in elke grafiek herkenbaar en hetzelfde zijn (door de 1e grafiek te kopieren..). (dus zodat je een legenda krijgt met de namen van het schip)

Handmatig zou je dus voor elk apart schip de data apart moeten selecteren. nu heb ik de gehele kolom geselecteerd, maar uit het scatter diagram wordt niet echt duidelijk welk schip goed scoort.

Bekijk bijlage Vergelijkingsschepen_forum.xls

Of is er wellicht een andere manier om een duidelijk plaatje/grafiek te kunnen presenteren?

bedankt!
 
Welke versie van Excel? Bij eerdere versies zat er een harde limiet aan het aantal te gebruiken kleurtjes e.d.
 
Hier zit dus wel degelijk verschil, 2003 is strikt gelimiteerd in het aantal series. 2007 kan omgaan met veel grotere datasets.

de grafiek vullen kan met de volgende code:
Code:
    With ActiveSheet.ChartObjects(1).Chart

        While .SeriesCollection.Count
            .SeriesCollection(1).Delete
        Wend
        
        .ChartType = xlXYScatter
        Dim reeks As Series
        
        For i = 1 To 50
            Set reeks = .SeriesCollection.NewSeries
            With reeks
                .XValues = Cells(4 + i, 2)
                .Values = Cells(4 + i, 3)
            End With
        Next i
        
    End With

in dit geval heb ik 1 grafiek op de pagina, en 50 datasets beginnend van B5 t/m c54. de kleuren en iconen worden hier gekozen door excel, maar er zijn ook handmatige reeksen in te stellen en zelfs eigen vormpjes
 
Okay, bedankt!

Ik heb hem nu werkend gekregen, maar hoe kan ik de as reeks aanpassen;
ik heb op de worksheet boven elke kolom een maximum en minimum bepaald met =MAX(....)
Deze waarde wil ik gebruiken om de as te definieren. Waar kan ik een reeks van commando's vinden om de diverse eigenschappen van de grafiek aan te passen?
 
De makkelijkste manier om deze commando's te vinden is even rondneuzen op MSDN.

ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MaximumScale = <hier je max>

is volgens mij wat je zoekt.
 
Bedankt, had het zelf ook al bijna werkend gekregen.

Nu wil ik graag door middel van 1 sub, de andere sub's die de grafieken aanmaken laten runnen. zodat er niet steeds 1 voor 1 elke macro gestart moet worden...
 
Je kunt dit op twee manieren aanpakken. Als er veel overlap is tussen de grafieken kun je een gewoon in een enkele subroutine plaatsen.

Anders kun je vanuit een hoofdroutine gewoon natuurlijk via calls de andere routines aanroepen.
 
Hoe bedoel je de overlap? vaste x waarden en varierende y waarden (dat is hier veelal het geval).
Met de code die ik nu heb probeerde ik dubbel te gebruiken binnen dezelfde sub, maar krijg ik een fout melding:confused: . Is ook lang geleden voor mij, niet alles is blijven hangen, dus volg sommige acties van VBA niet meer helemaal. Dit is voor 1 grafiek;

Sub Grafiek_vullen3()

With ActiveSheet.ChartObjects(3).Chart
.HasTitle = True
.ChartTitle.Text = "Grafiek"

'' veranderen bij nieuwe grafiek
' Waarden (X) Axis
With .Axes(xlCategory)
.MaximumScale = ActiveSheet.Range("$e$2").Value
.MinimumScale = ActiveSheet.Range("$e$3").Value
.HasMajorGridlines = True
' astitel, verander alleen de letter, overeenkomstig met de gekozen kolom bij *
.HasTitle = True
.AxisTitle.Caption = ActiveSheet.Range("$e$4").Value
End With

'' veranderen bij nieuwe grafiek
' Waarden (Y) Axis
With .Axes(xlValue)
.MaximumScale = ActiveSheet.Range("$i$2").Value
.MinimumScale = ActiveSheet.Range("$i$3").Value
.HasMajorGridlines = True
' astitel, verander alleen de letter, overeenkomstig met de gekozen kolom bij **
.HasTitle = True
.AxisTitle.Caption = ActiveSheet.Range("$i$4").Value
End With

While .SeriesCollection.Count

'' veranderen bij nieuwe grafiek
.SeriesCollection(3).Delete
Wend
.ChartType = xlXYScatter

Dim reeks As Series

For i = 1 To 61
Set reeks = .SeriesCollection.NewSeries
With reeks
.Name = Cells(4 + i, 3)

'' veranderen bij nieuwe grafiek
' gekozen kolom x-as *
.XValues = Cells(4 + i, 5)

'' veranderen bij nieuwe grafiek
' gekozen kolom y-as **
.Values = Cells(4 + i, 8)
End With

Next i

End With
End Sub

Kan ik hier ook een 2e kolom met Y-waarden aan toevoegen, die dezelfde naam hebben als de gegevens van de 1e kolom;
naam 1, Waarde x1, waarde y1, waarde y2,
naam 2, Waarde x2, waarde y1, waarde y2,




daarnaast was ik inderdaad op zoek naar dat aanroepen via calls, ik zal dat eerst zelf even uitvogelen
 
Kleine opmerking:

.SeriesCollection(3).Delete

Dit zou (1) moeten zijn. nu worden serie 1 en 2 niet gedelete. de seriescollection is onderdeel van chart dus zolang je het toepast op chart 3, kan hier seriescollection(1) staan.

De waarden voeg je eigenlijk toe als "RANGE". In principe is het "CELLS" commando een range van 1 enkele cell. Je kunt dus een range van 2 y-values toevoegen, ipv de enkele nu (zeg ik even uit het hoofd, ben op het moment op zakenreis)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan