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

afronden datalabel

Status
Niet open voor verdere reacties.

Symphysodon

Gebruiker
Lid geworden
14 dec 2012
Berichten
468
Beste forummers,

Is het mogelijk om van een FullSeriesCollection() van een chart object het getal wat bij het datalabel hoort af te ronden met een functie?
Nu krijg ik het alleen voor elkaar om het getal met een aantal decimalen te presenteren het afronden met de funtie: Afronden(Getal) lukt niet.
Code:
.DataLabels.NumberFormat = "#,#0"
Met de code:
Code:
.DataLabels.Type = Afronden(xlValue)
wordt het getal wel afgerond maar is niet zichtbaar in de grafiek.

Het gaat om een bestanden variërend van 5 tot 27 grafieken, ik kan daarom niet met de Numberformat werken omdat de getalswaarden van alle grafieken anders zijn.

Hoe zou ik dit voor elkaar kunnen krijgen?

mvg
Marco
 
snap ik. Maar het is een onderdeel van een grafiekenprogramma vanuit een userform. Ik kan je wel de code geven van het onderdeel:
Code:
        With .FullSeriesCollection("gem")
            .HasLeaderLines = False
            .DataLabels.ShowSeriesName = True
            .DataLabels.Separator = "= "
            .DataLabels.Type = Afronden(xlValue)
            .DataLabels.NumberFormat = "#,0.0"
            .Points(1).DataLabel.Delete
            .XValues = Array(0, 1)
            .Values = Array(g, g)
            .ChartType = xlXYScatterLinesNoMarkers
            .AxisGroup = 2 'secundaire as
            .Format.Line.ForeColor.RGB = RGB(0, 0, 0)
            .Format.Line.Weight = 0.5
            .Format.Line.DashStyle = msoLineSolid
            .HasLeaderLines = False
            .DataLabels.ShowSeriesName = True
            .DataLabels.Separator = " = "
            .Points(1).DataLabel.Delete
        End With

Ik hoop dat je hier wat mee kan en als je een idee hebt hoe ik een voorbeeld kan plaatsen dan doe ik dat meteen, ben hier al weer uren mee bezig om het op te lossen.
 
Misschien wordt het met wat meer uitleg duidelijker. De gegeven code maakt in een xy grafiek een grenslijn. In dit geval een horizontale zwarte lijn met naast de lijn het woordje "gem = .." van gemiddelde met de waarde van het gemiddelde op de plaats van de puntjes. Het gaat om het afronden van die waarde
 
En toch sta ík in ieder geval niet te popelen om het na te bouwen. En zo te zien ook niemand anders :). Je kunt toch wel de betreffende onderdelen met wat dummy data meesturen?
 
Ik was al begonnen met het bestand te minimaliseren tot de betreffende onderdelen, maar krijg dan allerlei andere foutmeldingen waar ik niet meteen uitkom. Ik ga ermee verder tot het lukt. :)
 
Het lukt helaas niet een aangepast voorbeeldbestand te maken. Ik kom nu ook andere problemen tegen die ik niet opgelost krijg, daarom in de bijlage het gehele bestand enigszins aangepast. De genoemde code staat in de module: Dataverwerking.
 

Bijlagen

  • afronden numberformat.xlsm
    118,6 KB · Weergaven: 26
snelste manier leek me gewoon de datalabel aan te passen met bv.
Code:
         .DataLabels(2).Format.TextFrame2.TextRange.Characters.Text = "gem = " & Format(g, "0.00")
Ik ben niet aan het uitzoeken geweest wat er nog allemaal uit die macro kon gesloopt worden, de macro-recorder neemt teveel troep mee.
 

Bijlagen

  • afronden numberformat.xlsm
    117,7 KB · Weergaven: 35
Op deze manier krijg je toch altijd 2 decimalen gepresenteerd, terwijl ik het aantal decimalen wat zichtbaar is wil baseren op de grootte van het getal. 11.1233434 wordt dan 11.1 terwijl bijvoorbeeld: 0.06945454 wordt dan: 0.0695. Om dat voor elkaar te krijgen heb ik de functie Afronden in de module Afrondingen gemaakt.
 
Het is gelukt.
Code:
.DataLabels(2).Format.TextFrame2.TextRange.Characters.Text = "gem = " & Afronden(g)
 
zo dan ?
Code:
              .DataLabels(2).Format.TextFrame2.TextRange.Characters.Text = "gem = " & Afronden(g)     '<--------------toegevoegd---------------------------------------------
          
               .DataLabels(2).Format.TextFrame2.TextRange.Characters.Text = "gem + s = " & Afronden(g + sd) '<----------toegevoegd------------------------------------
ik zag dat je het ook al gevonden had ...
 
Een probleem waar ik nog tegen aan loop is de dynamic range voor de grafiek. De range wordt bepaald op basis van de kolom met de meeste meetpunten. Ik zou graag willen dat het bereik van de x-as zo groot is als het aantal meetpunten. In de bijlage een voorbeeld met wat ik bedoel. (de x-assen van de grf van meetpunt 2 en meetpunt 4 lopen te ver door)
 

Bijlagen

  • afronden numberformat.xlsm
    106,5 KB · Weergaven: 16
het geheel zit wel moeilijk in elkaar.
Wat is de bedoeling ?
automatisch genereren van een aantal lijngrafieken met labels in de X-as en dan op de 2e Y-as wat aanduidingen voor -3s tot +3s en de uitschieters nog rood kleuren ?
 
Voorlopig is dat precies de bedoeling zoals je zegt. Op de 2e y-as zijn dan de horizontale grenslijnen weergegeven. De grenslijnen worden gebaseerd op een keuze van vast ingestelde waarden of waarden op basis van de meetgegevens. In te stellen via: >Charts, >Data, > Properties
 
Laatst bewerkt:
ik kom op zoiets, voorlopig voor 1 grafiek op blad1, dus nog een extra loopje om jouw grafieken aan te sturen.
Het werkt met een gewone lijngrafiek ipv een combinatiegrafiek.
 

Bijlagen

  • afronden numberformat (3).xlsm
    137,1 KB · Weergaven: 18
Laatst bewerkt:
nu met dat loopje in tabblad "test"
 

Bijlagen

  • afronden numberformat (3).xlsm
    167 KB · Weergaven: 51
Laatst bewerkt:
Dit noemen ze dus programmeren :thumb:

Ik begrijp nog niet alles, maar ga er mee aan de slag.
De x-as ziet er nu ook uit zoals het hoort.
Bij de y-as moeten de waarden nog afgerond worden met de functie
Bij het gemiddelde moet alleen "gem" staan niet "gem" +0 s
Het keuze menu (usVerwerking) werkt nog niet met het Hoofdprogramma.
Bij de afkeur van de meetpunten heb je blauw voor > of < 2 sigma dat moet worden 4 van 4 boven 1 sigma of 4 van 4 beneden 1 sigma.

Ik hoop dat ik er zelf uit kom, maar tot zover bedankt.
 
Laatst bewerkt:
misschien deze voor de afronding van de Y-assen
Code:
Sub Grafiek_Aanpassen()

   With Chrt
      .Axes(xlCategory).AxisBetweenCategories = False

      With .Axes(xlValue, xlPrimary)
        [COLOR="#FF0000"] mijnmin = Application.Min(kl, g - 4 * sd)              'je minimum
         mijnmax = Application.Max(gr, g + 4 * sd)              'je maximum
         Delta = (mijnmax - mijnmin) / 6                        'deel het verschil door 6
         edelta = WorksheetFunction.Power(10, Right(Format(Delta, "0E+00"), 3))   'tot zoveelste macht van 10 afronden straks
         .MinimumScale = Application.WorksheetFunction.Floor_Math(mijnmin, edelta)   'mijnmin naar beneden afronden
         .MaximumScale = Application.WorksheetFunction.Ceiling_Math(mijnmax, edelta)   'mijnmax naar boven afronden[/COLOR]
         .MajorUnitIsAuto = True
         .CrossesAt = .MinimumScale
         .TickLabels.NumberFormatLinked = -1                    'decimals gekoppeld aan bron
      End With
      ...
suc6 met de rest
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan