ich habe leider noch keinerlei Makrokenntnisse und eine Frage zu einem Makro von Franz, welcher in folgendem Beitag aus 2006 vorkommt:
Hallo,
ich habe folgendes Problem:
Ich möchte aus Datensätzen der Form
-------- Aktien Renten ...
Ertrag 18,76% 3,04% ...
Risiko 12,09% 1,58% ...
ein Punktdiagramm von einem Makro erstellen lassen. Die Anzahl der Datensätze ist variabel. An _
der X-Achse soll das Risiko, an der Y-Achse der Ertrag abgetragen werden. So soll ein Datenpunkt für die verschiedenen Anlageklassen entstehen.
Ich wäre sehr dankbar, wenn mir jemand helfen könnte, wie ich die Grafik am komfortabelsten _
erstellen kann.
Danke
Hallo Bautsch,
folgende Makros produzieren ein X-Y-Punkt-Diagramm, wobei jeder Punkt eine eigene Datenreihe _
darstellt. Im Makro DatenbereichDiagramm legst du den Datenbereich fest. Die Subroutine produziert dann das Diagramm.
Ich hoffe das hilft weiter
Gruß
Franz
Sub DatenbereichDiagramm()
Dim Daten As Range, wks As Worksheet
Set wks = ActiveSheet
Zeile = 1 ' Nummer der Zeile mit den Kategorien (Aktie, Renten etc)
Spalte = 1 ' Nummer der Spalte mit den Beschriftungen X-Y-Achse (Ertrag, Risiko)
With wks
Set Daten = .Range(.Cells(Zeile, Spalte), .Cells(Zeile + 2, .Cells(Zeile, .Columns.Count). _
End(xlToLeft).Column))
End With
Call XY_diagramm_mit_Reihe_je_Spalte(Daten, wks)
End Sub
Private Sub XY_diagramm_mit_Reihe_je_Spalte(Daten As Range, wks As Worksheet)
' Erzeugt aus Bereich Daten ein XY-Punktdiagramm mit einer Reihe pro Spalte
' Bereich Daten muss beinhalten:
' 1. Spalte Beschriftung für X- und Y-Achse)
' Spalten 2 bis X sind Datenreihen
' 1. Zeile Beschriftung Datenreihen
' 2. Zeile Y-Werte
' 3. Zeile X-Werte
Dim Reihe As Series
Charts.Add
ActiveChart.ApplyCustomType ChartType:=xlXYScatter
ActiveChart.Location Where:=xlLocationAsNewSheet 'auf neuem Blatt
' ActiveChart.Location Where:=xlLocationAsObject, Name:=wks.Name 'auf dem Tabellenblatt
With wks
ActiveChart.SetSourceData Source:=.Range(.Cells(Daten.Row + 1, Daten.Column), _
.Cells(Daten.Row + Daten.Rows.Count - 1, Daten.Column + 3)), PlotBy:=xlRows
End With
Application.ScreenUpdating = False
For i = ActiveChart.SeriesCollection.Count To 2 Step -1
ActiveChart.SeriesCollection(i).Delete
Next
For i = 1 To Daten.Rows.Count - 1
Set Reihe = ActiveChart.SeriesCollection(i)
With Reihe
.Name = "=" & wks.Name & "!R" & Daten.Row & "C" & Daten.Column + i
.XValues = "=" & wks.Name & "!R" & Daten.Row + 2 & "C" & Daten.Column + i
.Values = "=" & wks.Name & "!R" & Daten.Row + 1 & "C" & Daten.Column + i
.ApplyDataLabels ShowSeriesName:=True 'Rubrik wird am Datenpunkt angezeigt
End With
If i Daten.Rows.Count - 1 Then
ActiveChart.SeriesCollection.NewSeries
End If
Next
Application.ScreenUpdating = True
With ActiveChart
.HasLegend = False
.HasTitle = True
.ChartTitle.Characters.Text = InputBox("Diagrammtitel", "Neues Diagramm", "Rendite _
Anlageklassen")
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = InputBox("Beschriftung X-Achse: _
", "Neues Diagramm", Daten(3, 1))
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = InputBox("Beschriftung Y-Achse:", _
"Neues Diagramm", Daten(2, 1))
End With
End Sub
Ich habe die Daten folgender Maßen in das Sheet eingegeben:A B C D
1 Katerogie1 Kategorie2 Kategorie3
2 Risiko 2 3 4
3 Ertrag 1% 2% 3%
Folgendes Problem: Ich weiß leider nicht, wie (bzw. wo genau) ich wie von Franz oben beschrieben Datenbereich festlege. Wenn ich den Makro laufen lasse, erscheinen als Serie lediglich Kategorie 1 und Kategorie 2., sprich A1:C3.
Könnte mir hier jemand helfen?
Vielen Dank im Voraus!
Lars