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

Datum op X-as van grafiek mee laten veranderen

Status
Niet open voor verdere reacties.

huygen

Gebruiker
Lid geworden
28 jul 2015
Berichten
16
Beste forumleden,

Ik heb een excel sheet gemaakt met veel data, deze data zou ik graag inzichtelijk willen maken door middel van grafieken.
Nu is alle data gekoppeld aan de tijd en heb ik een filter ingesteld om te kunnen selecteren op tijdsintervallen.
Met VBA kan ik nu een grafiek maken van deze data, maar het enige nadeel is dat de datum op de x-as niet gekoppeld is aan de datum van de data.
Hoe krijg ik dit voor elkaar?
Ik heb als voorbeeld een vereenvoudiging van het excelsheet toegevoegd.
De code die ik nu gebruik is:

Code:
Private Sub test_Click()

'Your data range for the chart
  Set rng = ThisWorkbook.Sheets(2).Range("d1:D99")

'Create a chart
  Set cht = ActiveSheet.ChartObjects.Add( _
    Left:=ActiveCell.Left, _
    Width:=250, _
    Top:=ActiveCell.Top, _
    Height:=150)

'Give chart some data
  cht.Chart.SetSourceData Source:=rng
  
With cht.Chart
.HasTitle = True
.ChartTitle.Characters.Text = "ChartTitle"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlCategory, xlPrimary).CategoryType = xlTimeScale
.Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "dd mmmm"
.Axes(xlCategory, xlPrimary).BaseUnit = xlMonths
.Axes(xlCategory, xlPrimary).MinimumScale = ThisWorkbook.Sheets(1).Range("B32")
.Axes(xlCategory, xlPrimary).MaximumScale = ThisWorkbook.Sheets(1).Range("B33")
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).MinimumScale = 0
.Axes(xlValue, xlPrimary).MaximumScale = 40
.HasAxis(xlCategory, xlPrimary) = True
.HasAxis(xlValue, xlPrimary) = True
.HasDataTable = False
.Axes(xlValue, xlPrimary).AxisTitle.Delete

End With
  
'Add minor gridlines
  Set ax = cht.Chart.Axes(xlValue)
    With ax
        .HasMinorGridlines = True
        .HasMajorGridlines = True
        .MajorUnit = 20
        .MinorUnit = 10
        .MinorGridlines.Border.LineStyle = xlxLine
        .MinorGridlines.Border.Color = RGB(192, 192, 192)
  End With
  
  'Legend position
  cht.Chart.Legend.Position = xlLegendPositionBottom

'Determine the chart type
  cht.Chart.ChartType = xlXYScatterLinesNoMarkers
       


    MsgBox ("Done")

End Sub

waarbij in cel B32 en B33 door middel van SUBTOTAAL gezocht wordt op de minimale en maximale waarde uit de gefilterde data.
Kan iemand mij hierbij helpen?
Alvast bedankt!

Groetjes

Bekijk bijlage Kopie van voorbeeld.xlsm
 
Dankje! Wel super handig, maar niet wat ik nu zoek.
Ik bedoel meer hoe ik de juiste datum uit kolom O van blad 2 op de x-as krijg.
Ik filter bijvoorbeeld op uur 5, dan krijg ik in kolom O de tijden/datum te zien die bij deze waarden horen.
Ik wil de waarden in het tabel, dit is al gelukt, en de bijbehorende datum op de x-as.
 
Is dit wat je zoekt?

In cellen L2 & L3 geef je gewenste start en eind tijdstippen van de grafieken.
De grafieken passen zich volledig automatisch aan de input.

Ik heb dit nu gedaan voor kolom temperatuur en vochtigheid uit de sheet KNMI.
Aan jou om de rest te doen :)

Merk op dat je de code mag wissen en terug gaan naar een xlsx ipv xlsm.

Bekijk bijlage DG_WS__V001.xlsm
 
Dit is inderdaad wat ik zoek, erg bedankt.
Hoe heb je dit precies gedaan want het is inderdaad geen macro, maar kan het ook nergens anders terug vinden.
Ik wil het bereik hierna namelijk dmv IF/ELSE aan gaan passen aan de filtering.
Als ik alleen een dag wil weten, dat hij de uren op de X-as geeft.
En als ik bijvoorbeeld een maand wil weergeven, de x-as in dagen is.
 
Inderdaad, zoals arrie23 aangaf, de truck zit hem in de "named ranges".
Via menu Formulas\Name Manager zie je een aantal named ranges.
Zo heb je bijvoorbeeld "rngX" die enkel de rijen selecteert volgens cellen L2 en L3 in kolom O van de sheet KNMI.
Dit wordt gedaan met de formule:
Code:
=OFFSET(KNMI!$O$2;MATCH(rngFrom;KNMI!$O:$O;1)-1;0;MATCH(rngTo;KNMI!$O:$O;1)-MATCH(rngFrom;KNMI!$O:$O;1);1)
Die range kan je voor alle grafieken gebruiken.

Dan heb je nog voor elke parameter die je in een grafiek wil zien een range met die specifieke data.
Voor de temperatuur is dat "rngTemperatuur", voor de vochtigheid is dat "rngRV", aan jouw om de andere te maken.
Eigenlijk is dat identiek dezelfde formule als die van de X-as maar met een andere kolom.
Kolom C voor de temperatuur
Kolom H voor de vochtigheid

In de grafiek moet je dan niet een vatse range geven maar die "named ranges".
Dat is dus rngX voor de X-as en rngRV voor de Y-as van de vochtigheid grafiek.

En hier zit een addertje onder het gras :(
Kijk je naar de bestaande grafieken, dan zie je "=DG_WS__V001.xlsm!rngX" staan voor de "Series X values:"
Echter wanneer je een nieuwe grafiek maakt mag je dat niet ingeven maar moet je wel =KNMI!rngX ingeven.
Dus de naam van de sheet, niet dat van de file.
Waarom dat plots de filenaam is ipv de Sheet naam moet je maar eens aan Bill vragen :)
Hopelijk was dit duidelijk... ...


Wat bedoel je met IF/ELSE filteren bereik enz enz??
Met de cellen L2 & L3 kan je toch een bereik kiezen, dus waarom nog filteren?!!?


Wanneer je het formaat van de X-as wil aanpassen zal je dat met VBA moeten doen.
Ik heb het formaat nu op "uu:mm" gezet omdat je maar één dag hebt.
Maar je kan dat nog aanpassen naar vb "dd:mm uu".
Dan is dat misschien wel ok voor alle gevallen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan