Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Diagramme aus Tabelle
19.06.2023 10:46:11
MMRH

Hi,

ich habe eine Tabelle, die in Row 1 ab Spalte F, 26 Überschriften enthält.
in row 17 sind Werte, die ab Spalte F bis AE (26) enthalten sind.

Markiere ich F1-AE1 und danach mit STRG F17-AE17 und gehe auf Einfügen, Diagramme etc. bekomme ich beim ersten Anlauf ein perfektes Balkendiagramm, das auf der X-Achse alle 26 Überschriften aus F1-AE1 enthält und die Werte F17-AE17 als je einen Balken.

Versuche ich das zu automatisieren, klappt es nicht, denn die X Achse enthält nur eine 1 statt den Überschriften aus F1-AE1. Hier mein Code. Ich bedanke mich für alle Beiträge, die weiterhelfen.

ich gehe in das Blatt "Datenbasis" und suche eine Position aus Spalte E aus. Von dort aus wird der Code ausgelöst.Ich erkläre zuerst 2 ranges. Wertebereich und Überschriftenleiste und vereine diese zu diagrammbereich.



Sub Diagrammerstellen()

Sheets("Datenbasis").Activate

Dim i As Integer
Dim eingebettetesdiagramm As Shape
Dim rng As Range
Dim diagrammbereich As Range, wertebereich As Range

Dim bezeichnung As Range


Set bezeichnung = Selection

If Selection.Rows.Count > 1 Or Selection.Columns.Count > 1 Then
    MsgBox ("Bitte wählen Sie nur eine Position in Spalte E aus"), vbOKOnly + vbCritical, "Warnung"
    Exit Sub
End If


'    ActiveChart.SetSourceData Source:=Range( _
'        "Datenbasis!$F$17:$AE$17,Datenbasis!$F$1:$AE$1")

Dim zeile As Integer
zeile = ActiveCell.Row '.Count


'Set wertebereich = Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, 26))
Set wertebereich = Range("Datenbasis!F" & zeile & ":AE" & zeile)

    wertebereich.Select
    
Dim überschriftenleiste As Range
Set überschriftenleiste = Range("Datenbasis!$F$1:$AE$1")

    überschriftenleiste.Select

Set diagrammbereich = Union(überschriftenleiste, wertebereich)

    diagrammbereich.Select
    
    

Dim jahrrng As Range
Dim werterng As Range

'Bereinigen
    Dim zelle As Range
    For Each zelle In diagrammbereich
        If zelle.Value = "leer" Or zelle.Value = "fehlende Angabe" Or zelle.Value = "0,001" Then
            zelle.Value = ""
        End If
    Next



Sheets("Visualisierung").Activate

Set rng = Range("a2:e32")

'Cells(1, 1).Value = bezeichnung

Set eingebettetesdiagramm = Sheets("Visualisierung").Shapes.AddChart2(201, xlColumnClustered, Left:=rng.Left, Width:=rng.Width, Top:=rng.Top, Height:=rng.Height)

    eingebettetesdiagramm.Chart.SetSourceData Source:=diagrammbereich
    
    eingebettetesdiagramm.Chart.ClearToMatchStyle

    
    
    
    eingebettetesdiagramm.Chart.HasTitle = True
        eingebettetesdiagramm.Chart.ChartTitle.Text = bezeichnung

    'eingebettetesdiagramm.Chart.ChartTitle.format.TextFrame2.TextRange.Font.Size = 11
    'eingebettetesdiagramm.Chart.SetElement (msoElementDataLabelOutSideEnd)
    'eingebettetesdiagramm.Chart.SetElement (msoElementDataLabelNone)
    'eingebettetesdiagramm.Chart.SetElement (msoElementDataTableWithLegendKeys)
    'eingebettetesdiagramm.Chart.SetElement (msoElementLegendNone)
    eingebettetesdiagramm.Chart.Axes(xlCategory).TickLabelPosition = xlLow
    eingebettetesdiagramm.Chart.SetElement (msoElementDataLabelOutSideEnd)

                    
Dim seriescol As Integer, startseriescol As Integer
seriescol = eingebettetesdiagramm.Chart.SeriesCollection.Count
For startseriescol = 1 To seriescol
    eingebettetesdiagramm.Chart.FullSeriesCollection(startseriescol).DataLabels.Position = xlLabelPositionCenter
eingebettetesdiagramm.Chart.FullSeriesCollection(startseriescol).DataLabels.Orientation = xlUpward
eingebettetesdiagramm.Chart.FullSeriesCollection(startseriescol).DataLabels.Font.Size = 12
Next


                    
'Alles nach unten schieben

    Rows("1:33").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Cells(34, 1).Select
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramme aus Tabelle
19.06.2023 11:01:56
onur
Und was erwartest du jetzt? Dass Jemand deine Datei mit deinen Daten nachbaut, damit er deinen Code testen kann?


AW: Diagramme aus Tabelle
19.06.2023 11:28:48
Beverly
Hi,

also bei mir funktionert es nach diesem Prinzip problemlos:

Sub DiaErstellen()
    Dim rngBereich As Range
    Set rngBereich = Union(Range("F1:J1"), Range("F17:J17"))
    With ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 0, 0, 0, 0).Chart
        .ChartType = xlColumnClustered
        .SetSourceData Source:=rngBereich
        With .Parent
            .Left = Range("A2").Left
            .Top = Range("A2").Top
            .Width = Range("A2:E2").Width
            .Height = Range("A2:A32").Height
        End With
    End With
End Sub
Bis später
Karin



Anzeige
AW: Diagramme aus Tabelle
19.06.2023 11:43:20
MMRH
Hi. ich habe auf der x Achse nur eine 1 stehen. ich war in der hochgeladenen Datei und habe sogar nur F-j statt wie ursprünglich F-ae im code stehen lassen.


AW: Diagramme aus Tabelle
19.06.2023 12:22:10
Beverly
Sub DiaErstellen()
    Dim rngDia As Range
    With Worksheets("Datenbasis")
        Set rngDia = Union(.Range("F1:AE1"), .Range("F17:AE17"))
    End With
    With ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 0, 0, 0, 0).Chart
        .ChartType = xlColumnClustered
        .SetSourceData Source:=rngDia, PlotBy:=xlRows  '== Dieser Zusatz ist bei dir notwendig!!
        With .Parent
            .Left = Range("A2").Left
            .Top = Range("A2").Top
            .Width = Range("A2:E2").Width
            .Height = Range("A2:A32").Height
        End With
    End With
End Sub
Bis später
Karin


Anzeige

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige