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.

gegevens en resulterende grafiek

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

voorbeeld van een lege 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 .

gegevens en grafiek van SERIES-formule

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

voor afbeelding van verschillende grafieken

Na

raster van grafieken



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow