excel-vba
Grafieken en grafieken
Zoeken…
Een grafiek met bereiken en een vaste naam maken
Grafieken kunnen worden gemaakt door rechtstreeks te werken met het Series object dat de grafiekgegevens definieert. Om naar de Series zonder een bestaand diagram, maakt u een ChartObject op een bepaald Worksheet en haalt u er vervolgens het Chart object uit. Het voordeel van werken met het object Series is dat u de Values en XValues kunt instellen door te verwijzen naar objecten Range . Deze gegevenseigenschappen zullen de Series correct definiëren met verwijzingen naar die bereiken. Het nadeel van deze benadering is dat dezelfde conversie niet wordt verwerkt bij het instellen van de Name ; het is een vaste waarde. Het wordt niet aangepast met de onderliggende gegevens in het oorspronkelijke Range . Het controleren van de SERIES formule en het is duidelijk dat de naam vast is. Dit moet worden afgehandeld door de SERIES formule rechtstreeks te maken.
Code gebruikt om grafiek te maken
Merk op dat deze code extra variabele declaraties bevat voor de Chart en het Worksheet . Deze kunnen worden weggelaten als ze niet worden gebruikt. Ze kunnen echter handig zijn als u de stijl of andere grafiekeigenschappen wijzigt.
Sub CreateChartWithRangesAndFixedName()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get reference to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
ser.Values = yData
ser.XValues = xData
ser.Name = serName
ser.ChartType = xlXYScatterLines
End Sub
Oorspronkelijke gegevens / bereiken en resulterende Chart na uitvoering van code
Merk op dat de SERIES formule een "B" voor de serienaam in plaats van een verwijzing naar het Range dat deze heeft gemaakt.
Een lege grafiek maken
Het startpunt voor het overgrote deel van de grafiekcode is om een lege Chart . Merk op dat deze Chart onderhevig is aan de standaard grafieksjabloon die actief is en mogelijk niet leeg is (als de sjabloon is gewijzigd).
De sleutel tot het ChartObject is het bepalen van de locatie. De syntaxis voor de aanroep is ChartObjects.Add(Left, Top, Width, Height) . Nadat het ChartObject is gemaakt, kunt u het Chart object gebruiken om de grafiek daadwerkelijk te wijzigen. Het ChartObject gedraagt zich meer als een Shape om de grafiek op het blad te plaatsen.
Code om een lege grafiek te maken
Sub CreateEmptyChart()
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (0, 0) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(0, 0, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'additional code to modify the empty chart
'...
End Sub
Resulterende grafiek
Maak een grafiek door de SERIE-formule te wijzigen
Voor volledige controle over een nieuw Chart en Series (vooral voor een dynamische Series ), moet u de formule SERIES rechtstreeks wijzigen. Het proces om de Range objecten in te stellen is eenvoudig en de belangrijkste hindernis is eenvoudig het bouwen van een string voor de SERIES formule.
De formule SERIES heeft de volgende syntaxis:
=SERIES(Name,XValues,Values,Order)
Deze inhoud kan worden geleverd als referentie of als matrixwaarden voor de gegevensitems. Order vertegenwoordigt de reekspositie in de grafiek. Merk op dat de verwijzingen naar de gegevens alleen werken als ze volledig gekwalificeerd zijn met de bladnaam. Klik voor een voorbeeld van een werkende formule op een bestaande reeks en controleer de formulebalk.
Code om een grafiek te maken en gegevens in te stellen met behulp van de SERIES formule
Merk op dat bij het maken van de tekenreeks om de SERIES formule te maken .Address(,,,True) . Dit zorgt ervoor dat de externe bereikreferentie wordt gebruikt, zodat een volledig gekwalificeerd adres met de bladnaam wordt opgenomen. U krijgt een foutmelding als de bladnaam is uitgesloten .
Sub CreateChartUsingSeriesFormula()
Dim xData As Range
Dim yData As Range
Dim serName As Range
'set the ranges to get the data and y value label
Set xData = Range("B3:B12")
Set yData = Range("C3:C12")
Set serName = Range("C2")
'get reference to ActiveSheet
Dim sht As Worksheet
Set sht = ActiveSheet
'create a new ChartObject at position (48, 195) with width 400 and height 300
Dim chtObj As ChartObject
Set chtObj = sht.ChartObjects.Add(48, 195, 400, 300)
'get refernce to chart object
Dim cht As Chart
Set cht = chtObj.Chart
'create the new series
Dim ser As Series
Set ser = cht.SeriesCollection.NewSeries
'set the SERIES formula
'=SERIES(name, xData, yData, plotOrder)
Dim formulaValue As String
formulaValue = "=SERIES(" & _
serName.Address(, , , True) & "," & _
xData.Address(, , , True) & "," & _
yData.Address(, , , True) & ",1)"
ser.Formula = formulaValue
ser.ChartType = xlXYScatterLines
End Sub
Oorspronkelijke gegevens en resulterende grafiek
Merk op dat voor deze grafiek de serienaam correct is ingesteld met een bereik tot de gewenste cel. Dit betekent dat updates worden doorgegeven aan de Chart .
Grafieken rangschikken in een raster
Een veel voorkomend karwei met grafieken in Excel is het standaardiseren van de grootte en lay-out van meerdere grafieken op één blad. Als u dit handmatig doet, kunt u ALT ingedrukt houden terwijl u het formaat van de grafiek wijzigt of de grafiek verplaatst om zich aan de celgrenzen te houden. Dit werkt voor een paar grafieken, maar een VBA-aanpak is veel eenvoudiger.
Code om een raster te maken
Deze code maakt een raster van diagrammen beginnend op een bepaalde positie (boven, links), met een gedefinieerd aantal kolommen en een gedefinieerde gemeenschappelijke kaartgrootte. De grafieken worden geplaatst in de volgorde waarin ze zijn gemaakt en worden om de rand gewikkeld om een nieuwe rij te vormen.
Sub CreateGridOfCharts()
Dim int_cols As Integer
int_cols = 3
Dim cht_width As Double
cht_width = 250
Dim cht_height As Double
cht_height = 200
Dim offset_vertical As Double
offset_vertical = 195
Dim offset_horz As Double
offset_horz = 40
Dim sht As Worksheet
Set sht = ActiveSheet
Dim count As Integer
count = 0
'iterate through ChartObjects on current sheet
Dim cht_obj As ChartObject
For Each cht_obj In sht.ChartObjects
'use integer division and Mod to get position in grid
cht_obj.Top = (count \ int_cols) * cht_height + offset_vertical
cht_obj.Left = (count Mod int_cols) * cht_width + offset_horz
cht_obj.Width = cht_width
cht_obj.Height = cht_height
count = count + 1
Next cht_obj
End Sub
Resultaat met verschillende grafieken
Deze afbeeldingen tonen de oorspronkelijke willekeurige lay-out van grafieken en het resulterende raster van het uitvoeren van de bovenstaande code.
Voordat
Na




