Toon posts:

Per gegevensreeks uit grote tabel een grafiek maken

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • +1 Henk 'm!

Verwijderd

Topicstarter
Op internet heb ik niets kunnen vinden over mijn vraag. Ik hoop dat er hier iemand een oplossing heeft.

Ik heb een invultabel met 100 rijen. Per rij staan naast elkaar eerst 10 gegevens voor de horizontale as en daarnaast 10 gegevens voor de verticale as. Deze gegevens worden door de gebruiker ingevuld.
Nu wil ik per rij een grafiek maken. Het lukt me wel om een grafiek te maken, deze grafiek te kopiëren en dan de gegevens aan te passen, maar ik wil dit niet 100 keer doen.
Is er een manier om deze 100 grafieken op een gemakkelijkere manier te maken?

Ik gebruik Excel 2010.

Alle reacties


Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
Wil je honderd individuele grafieken, of 100 lijnen in één grafiek?

geval 1: Excel heeft een grens van 255 werkbladen per werkboek, maar het is de vraag of dat werkbaar blijft..
geval 2: Wordt (denk ik) onleesbaar

Ik zou gaan voor een vba-code die voor elke rij een grafiek maakt, deze exporteert/opslaat als.png plaatje met een passende naam, de grafiek weer verwijderd en doorgaat naar de volgende rij.

Functioneel:
  1. stel bereik met alle rijen in
  2. ga naar de eerste rij
  3. stel bereik voor x en y-as in
  4. maak de grafiek
  5. stel een naam in voor de grafiek, en exporteer naar png
  6. verwijder de grafiek
  7. ga naar de volgende rij
  8. herhaal 3 t/m 7 tot alle rijen behandeld zijn.
Pakketten zoals 'R' zijn hier trouwens meer geschikt voor. 'R' icm het package 'ggplot' regelen dit binnen een paar seconden voor je... Je hebt dan alleen wel wat programmeerkennis nodig.

[ Voor 41% gewijzigd door breew op 07-04-2018 12:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank je voor je antwoord.
Ik wil op één tabblad alle honderd grafieken (of op zo weinig tabbladen als werkbaar blijft). Het zijn maar kleine grafieken. Het werkblad waarin de grafieken moeten komen moet een invulsheet worden waarmee bepaald kan worden of het verband tussen de waarden op de horizontale as en de waarden op de verticale as lineair of kwadratisch zijn. De grafieken zijn alleen om dit verband grafisch weer te geven.
De grafieken hoef ik dus maar een keer te maken, maar het kunnen geen plaatjes worden, want ze zullen steeds veranderen omdat er steeds andere waarden ingevuld zullen worden.

Ik heb niet veel verstand van VBA, ik kan wel macro's maken en ze daarna aanpassen, maar helemaal zelf een code schrijven lukt me (nog) niet.

Acties:
  • +1 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
@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 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank je. Ik ga ermee aan de slag. Ik zal laten weten of het gelukt is.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 08:00
Verwijderd schreef op zaterdag 7 april 2018 @ 15:24:
Dank je. Ik ga ermee aan de slag. Ik zal laten weten of het gelukt is.
succes!
Loop je ergens op vast -> google
Lukt het daarna nog steeds niet -> hier vragen ;-)
Pagina: 1