Toon posts:

Per gegevensreeks uit grote tabel een grafiek maken

Pagina: 1
Acties:

Onderwerpen


  • breew
  • Registratie: April 2014
  • Laatst online: 22:12
@Verwijderd
wat je kunt doen, is met de macro-recorder de handelingen opnemen die je uitvoert voor het maken van 1 grafiek...
De volgende stap is dan automatiseren dmv een loop met variabelen, waardoor je deze code herhaalt voor elke rij met data.

Kijk eens naar onderstaande code, en of je deze begrijpt.. Van daaruit kun je dan gaan aanpassen/customizen naar jouw eigen wensen/situatie.

Proof-of-concept
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Option Explicit

Sub MaakGrafieken()
  Dim rngX As Range 'range met x-waarden
  Dim rngY As Range 'range met y-waarden
  Dim strGrafiek As String 'grafieknaam
  Dim c As Range    'cel in bereik
  Dim i As Long     'lusteller
  
  'initialisatie van de lusteller
  i = 1
  With ActiveSheet
    For Each c In .Range("A2:A3")
      'titel / naam van de grafiek
      strGrafiek = c.Value
      'bereik x-as en y-as vaststellen
      Set rngX = .Range(.Cells(c.Row, 2), .Cells(c.Row, 5))
      Set rngY = .Range(.Cells(c.Row, 6), .Cells(c.Row, 9))
      'grafiek aanmaken en meteen selecteren (ik ben lui, ik weet het)
      ActiveSheet.Shapes.AddChart.Select
      'met de huidige grafiek
      With ActiveChart
        .ChartType = xlLine                         'type grafiek
        .SetSourceData Source:=rngY, PlotBy:=xlRows 'bereik met y-waarden
        .SeriesCollection(1).XValues = rngX         'bereik met waarden voor de x-as
        .Parent.Top = 100                           'bovenkant grafiek
        .Parent.Left = (i - 1) * 100                'linkerkant grafiek
        .Parent.Width = 100                         'breedte grafiek
        .Parent.Height = 100                        'hoogte grafiek
        .HasTitle = True                            'moet ie een titel hebben?
        .ChartTitle.Text = strGrafiek               'wat is de titel?
        .HasLegend = False                          'legenda?
      End With
      i = i + 1
    Next c
  End With
  
End Sub


levert het volgende op:
chartszz

Nu is het gebruik van ActiveSheet en ActiveChart niet erg handig (maar wel lekker makkeijk in de opbouw-fase).. Beter is het om rechtstreeks te verwijzen naar het gewenste werkblad/grafiek-object.. houd daar in je uiteindelijke code rekening mee..

Oh ja, vba heeft geen undo-knop.. houd daar ook rekening mee 8)
data kwijt = data kwijt

[ Voor 7% gewijzigd door breew op 07-04-2018 16:18 ]

Pagina: 1