Achsengskalierung variabel nicht ohne VBA
08.08.2007 07:41:00
Beverly
Hi Jörg,
das gepostete Beispiel ist das Maximale, was man mithilfe einer Formel erreichen kann. Das liegt ganz einfach daran, dass bei dieser Voregehensweise die Skalierung auf automatisch gestellet sein muss. In diesem Fall nimmt Excel jedoch immer 0 als Minimum an.
Um dieses Problem zu lösen bedarf es nur eines kleinen VBA-Codes:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chDiagramm As Chart
Dim raStart As Range
Dim raEnde As Range
If Target.Count > 1 Then Exit Sub
With ActiveSheet
Set raStart = .Range("A6:A25").Find(.Range("D20"))
Set raEnde = .Range("A6:A25").Find(.Range("E20"))
Set chDiagramm = .ChartObjects(1).Chart
On Error GoTo Ende
Select Case Target.Address
Case "$D$20", "$E$20", "$F$20", "$G$20", "$D$21", "$E$21", "$F$21", "$G$21"
chDiagramm.SetSourceData Source:=.Range("A" & raStart.Row & ":B" & raEnde.Row)
If Target.Row = 20 Then
With chDiagramm.Axes(xlPrimary)
.MinimumScale = ActiveSheet.Range("D20")
.MaximumScale = ActiveSheet.Range("E20")
If ActiveSheet.Range("F20") = "" Or ActiveSheet.Range("G20") = "" Then
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
Else
.MajorUnit = ActiveSheet.Range("F20")
.MinorUnit = ActiveSheet.Range("G20")
End If
End With
Else
With chDiagramm.Axes(xlValue)
.MinimumScale = ActiveSheet.Range("D21")
.MaximumScale = ActiveSheet.Range("E21")
If ActiveSheet.Range("F20") = "" Or ActiveSheet.Range("G21") = "" Then
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
Else
.MajorUnit = ActiveSheet.Range("F21")
.MinorUnit = ActiveSheet.Range("G21")
End If
End With
End If
End Select
End With
Ende:
Set raStart = Nothing
Set raEnde = Nothing
Set chDiagramm = Nothing
End Sub
In Zeile 20 werden die Skalierungswerte für die X-Achse, in Zeile 21 für die Y-Achse eingegeben. Minimum in Spalte D, Maximum in Spalte E, Hauptintervall in Spalte F und Hilfsintervall in Spalte G.
Bis später,
Karin