• 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.

Layout grafiek afhankelijk vd inhoud.

Status
Niet open voor verdere reacties.

popipipo

Meubilair
Lid geworden
21 nov 2006
Berichten
8.426
Kan ik de layout van een grafiek afhankelijk laten zijn van de inhoud.
Formaat van de assen op automatisch zetten voldoet niet helemaal.
Het beginpunt staat dan nl altijd op 0 en dat wil ik nu juist net niet.
Zet ik hem op vast dan passen de grafieken weer niet goed.
 

Bijlagen

  • grafiek layout.xls
    35 KB · Weergaven: 26
wat bepaald wat de juiste schaal is? de hoogste en laagste waarden? Anders is het redelijk makkelijk om door alle grafieken te lopen met een macro en handmatig de onder -en bovengrenzen aan te passen.

Ikzelf beheer een kleine valuta en wisselkoers excel file waar ik uit een website hun tabel inlaad en vervolgens dynamisch de schaal beheer door de onder en bovenwaarden in te stellen.
 
Laatst bewerkt:
Ik was er al bang voor dat het alleen via VBA kon
Toch maar een poging met 'macro opnemen' gedaan.

Met mijn beperkte kennis van VBA ben ik tot dit resultaat gekomen.

VBA experts: Is dit nog te verbeteren?
 

Bijlagen

  • grafiek layout 2.xls
    50,5 KB · Weergaven: 21
De code kan wat opgeruimd worden, maar is verder volgens mij prima. Je zou eventueel de min en max scale ook kunnen bepalen via een formule, in plaats van die hardcoden in een tabel.

=AFRONDEN.NAAR.BENEDEN(MIN(B2:D6)/10;0)*10 minimum waarde
=AFRONDEN.NAAR.BOVEN(MAX(B2:D6)/10;0)*10 maximum waarde
=AFRONDEN.NAAR.BOVEN((<max>-<min>)/50;0)*5 stapgrootte

opgeschoonde code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$17" Then

    With ChartObjects("Chart 1").Chart
        .Axes(xlCategory).MinimumScale = Range("b18")
        .Axes(xlCategory).MaximumScale = Range("b19")
        .Axes(xlCategory).MajorUnit = Range("b20")
        .Axes(xlValue).MinimumScale = Range("b18")
        .Axes(xlValue).MaximumScale = Range("b19")
        .Axes(xlValue).MajorUnit = Range("b20")
    End With

 End If
End Sub
 
Wampier

Mooie opschooncode gekregen die ook prima leesbaar is.

Je afrondingsformules vind ik echter iets minder.

Ik heb al een paar uur mijn nek over lopen breken maar krijg hem niet goed werkend.
bijgaand een tabelletje (A2:B9) met getallen die ik in verschillende grafieken wil krijgen.

Wie heeft de 3 formules (kolom E, F en G) om deze afronding voor elkaar te krijgen.
Let wel de uitslag van de formule is dus het bereik van de grafiek.

Ik kan zelf wel 2 alternatieven maken.
- Aan elke combinatie (test) de grafiek grootte koppelen
- Een tabel maken en dan via vert.zoeken de getallen verkrijgen.

Ben dus opzoek naar mooi ogende getallen, waar bij het 'minimum scale' dus kleiner is dan waarde in kolom A en maximum scale groter dan kolom B.

Ik heb dus een vast formaat grafiek en de lijn die er instaat moet mooi over de gehele grafiek verdeeld zijn.
 

Bijlagen

  • afronden.xls
    20,5 KB · Weergaven: 31
Je had natuurlijk geen range aangegeven en het was een suggestie. Zoals je ziet is mijn formule voor afronden op 10-tallen en stappen voor 5 voor de increment. De range kan zeker wel dynamischer.

Waar ik na een eerste blik het meeste mee zit is de "major unit"

Stappen
10
10
6
6
4
10
4
11

min max kan ik kijken of ik een betere formule voor kan vinden.
 
Dit is wat ik er van kan maken met een aangepaste formule voor de MIN MAX berekening. type 1 rond af op 5-tallen, type 2 rond af op 10-tallen.

type 1 type 1 type 2 type 2 gewenst gewenst
0 1 0 1 0 1
0 2 0 2 0 2
1 4 1 4 1 4
1,5 6,5 1 7 2 8
4,5 11,5 4 12 4 12
25 65 20 70 25 75
115 165 110 170 100 200
150 1150 100 1200 100 1200
 
Oeps, gister laat waarschijnlijk vergeten bij te posten. Is het iets waarmee je wat mee kunt (gezien mijn tabel), of zijn de ranges nog niet bruikbaar? Ik zal het vanavond als ik thuis ben even posten. Het is nogal een monster geworden

[edit]

Code:
=ALS((AFRONDEN(LOG10(B2);0)-1) > 0;AFRONDEN.NAAR.BENEDEN(A2/(10*10^(AFRONDEN(LOG10(B2);0)-1));1)*10*10^(AFRONDEN(LOG10(B2);0)-1);AFRONDEN.NAAR.BENEDEN(A2/10;1)*10)
 
Laatst bewerkt:
Het is inderdaad een monster formule geworden.

Ik ga eens met mijn collega overleggen welke optie we gaan gebruiken.


Bedankt voor de moeite.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan