Frage von eao44, 48

Punktediagramm in Excel dynamisch erweitern?

Hallo Zusammen ich habe folgendes Problem.

Ich möchte ein Punktdiagramm erstellen welches an der Horizontalen Achse die Eintrittswahrscheinlichkeit und an der Vertikalen Achse die Schadenshöhe anzeigt. Hier ist der Link zu der Excel Datei.

http://www.pmbs-unternehmensberatung.de/mediapool/98/988325/data/risikoinventar_...

Die Namen der Punkte sollen demnach den Titel in der Spalte B annehmen. So weit so gut. Diese Datei macht auch das was ich eigentlich möchte. Jedoch möchte ich diese Dynamisch erweitern. Sprich, wenn ich weitere werte angebe, sollen dementsprechend mehrere Punkte automatisch angezeigt werden. Es sollen also nicht nur 5 Risiken angezeigt werden sondern genau so viele Risiken in den Punktdiagramm anzeigen wie ich eben eingebe.

Ich wäre für eine Hilfe sehr dankbar. :)

Expertenantwort
von Oubyi, Community-Experte für Excel, 37

Ich denke dazu findest Du auf Karins (Beverlys) HP hilfe:

http://excel-inn.de/

Schau mal unter:
Diagramme/ Dynamisches Diagramm1

Antwort
von PWolff, 34

Ich hab mal ein bisschen rumprobiert - ein Diagramm scheint nicht zu begreifen, wenn man ihm einen benannten Bereich für die Werte übergeben möchte.

Von daher geht das wohl nur mit Makro.

Hab das mit gut 100 Codezeilen geschafft (einschl. Tests).

(verwendete Excel-Version: 2010)

Kommentar von eao44 ,

Hätten Sie mir ihre Datei? 

Kommentar von PWolff ,

Quelltext der betreffenden Tabelle:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Const immerFüllen As Boolean = False
Const zNr_Start = 3 'Start der Datenzeile

Dim AnzahlDatenpunkteNeu As Integer
Dim co As ChartObject, coIndex As Integer

Dim i As Integer
Dim zNr As Long
Dim sNr As Integer, sNr_Name As Integer, sNr_WKeit As Integer, sNr_SHöhe As Integer 'Spaltennr generell, Risikoname, Risikowahrscheinlichkeit, mögl. Schadenhöhe

Dim Kontrollieren_Name As String, Kontrollieren_XValues As String, Kontrollieren_Values As String

sNr = 2 'Spalte B:
AnzahlDatenpunkteNeu = 0
For zNr = zNr_Start To 32767
If Cells.Item(zNr, sNr).Value = "" Then Exit For 'zNr
AnzahlDatenpunkteNeu = AnzahlDatenpunkteNeu + 1
Next zNr

For coIndex = 0 To Me.ChartObjects.Count - 1 'Standard in Excel ist wohl 1 To Me.ChartObjects.Count, aber ich will mich nicht umgewöhnen
Set co = Me.ChartObjects.Item(1 + coIndex) 'die Arrays von in Excel angezeigten Objekten sind 1-basiert - hier die Diagramme

With co.Chart.SeriesCollection
If .Count = AnzahlDatenpunkteNeu Then GoTo Continune_For_coIndex 'VB6 kennt noch kein Continue - in diesem Fall halte ich ein GoTo für angebracht

'Spaltennummern für die Datenquellen festlegen
sNr_Name = 2 'Spalte B
'Hier nehme ich gerade und ungerade für neu eingeführte Testdiagramme; man kann beliebige Kriterien nehmen
If WorksheetFunction.IsEven(coIndex) Then
'gerade: vor Gegenmaßnahmen
sNr_WKeit = 4 'Spalte D
sNr_SHöhe = 5 'Spalte E
Else
'ungerade: nach Gegenmaßnahmen
sNr_WKeit = 9 'Spalte I
sNr_SHöhe = 10 'Spalte J
End If

For i = .Count - 1 To AnzahlDatenpunkteNeu Step -1 'überflüssige löschen
zNr = zNr_Start + i
With .Item(1 + i)
.Delete
End With '.Item(1 + i)
Next i '= Count - 1 To AnzahlDatenpunkteNeu Step -1 'überflüssige löschen
Debug.Assert (.Count <= AnzahlDatenpunkteNeu)

For i = .Count To AnzahlDatenpunkteNeu - 1 'neu hinzugekommene hinzunehmen
zNr = zNr_Start + i
.NewSeries
If Not immerFüllen Then
With .Item(1 + i)
.Name = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_Name).AddressLocal()
.XValues = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_WKeit).AddressLocal()
.Values = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_SHöhe).AddressLocal()
End With '.Item(1 + i)
End If
Next i '= Count To AnzahlDatenpunkteNeu - 1 'neu hinzugekommene hinzunehmen
Debug.Assert (.Count >= AnzahlDatenpunkteNeu)

Debug.Assert (.Count = AnzahlDatenpunkteNeu)

If immerFüllen Then
For i = 0 To .Count - 1
zNr = zNr_Start + i
With .Item(1 + i)
.Name = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_Name).AddressLocal()
.XValues = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_WKeit).AddressLocal()
.Values = "='" & Me.Name & "'!" & Me.Cells(zNr, sNr_SHöhe).AddressLocal()
On Error Resume Next
.BubbleSizes = "={5,5}"
With .Format.Line
.Visible = msoTrue
.Weight = 1
.DashStyle = msoLineSolid
.ForeColor.RGB = RGB(0, 0, 0)
End With
On Error GoTo 0
End With '.Item(1 + i)
Next i '= 0 To .count - 1
End If

End With 'co.Chart.SeriesCollection
Continune_For_coIndex:
Next coIndex '= 0 To Me.ChartObjects.Count - 1 'Standard in Excel ist wohl 1 To Me.ChartObjects.Count, aber ich will mich nicht umgewöhnen

End Sub
Kommentar von eao44 ,

Leider hat das nicht so wirklich geklappt bei mir ...

https://www.dropbox.com/s/9xsgfwcfks4vzwu/Risikoinventar.xlsx?dl=0

ich habe hier mal eine Datei hoch geladen wie ich das gemeint habe... 

In Tabelle 1 befinden sich meine Daten und in Tabelle 2 sind die beiden Risikomatrizen. In der ersten Risikomatrix sollen die Schadenshöhe und die Eintrittswahrscheinlichkeit vor der Gegenmaßnahme und die Schadenshöhe und die Eintrittswahrscheinlichkeit nach der Gegenmaßnahme dargestellt werden. Jedoch soll der Name (der Titel der auch in der Legende stehen sollte) immer dieser Nennung welches in "Risikoart" steht annehmen.

Diese soll eben dann dynamisch erweitert werden :/

Kommentar von PWolff ,

Das Makro sollte sich leicht für Daten in einer anderen Tabelle erweitern lassen.

Und - sorry - ich verstehe die letzte Datei nicht.

Kommentar von PWolff ,

(Ich meine, wie die Diagramme aufgebaut sind. Worauf beziehen sie sich? Sollen sie sortiert werden?)

Kommentar von eao44 ,

Also es handelt sich hierbei um ein Punktediagramm.  In der Tabelle Risikoinventar sollen die Tabellen ausgefüllt werden.

Ich habe hierzu mal ein Beispiel hoch geladen.

https://www.dropbox.com/s/9xsgfwcfks4vzwu/Risikoinventar.xlsx?dl=0

Die Werte in der Tabelle Risikomatrix beziehen sich auf die Tabelle Risikoinventar.  Vielleicht ist das ja verständlicher mit einem Beispiel.Nun soll dieses Punktediagramm in der Tabelle Risikomatrix eben automatisch erweitert werden, wenn man in dem Tabellenblatt Risikoinventar mehr werte einfügt bzw die Tabelle ausfüllt. 

Wie man das vielleicht in der Datei erkennen kann habe ich das bis jetzt nur für 8 Werte "bereit" gestellt. wenn ich nun eine 9. Zeile in dem Risikoinventar ausfüllen würde, würde sich in dem Punktediagramm nichts ändern... da sollte aber noch ein 9. Punkt hinzukommen ....

Kommentar von PWolff ,

Das ist mit einer Erweiterung des Makros zu schaffen.

Brauchst du das für ein profitorientiertes Unternehmen? Oder für einen gemeinnützigen Verein?

Kommentar von eao44 ,

Nein ich brauche das für meine Bachelorthesis :)

Ich schreibe über das Thema Risikomanagement und versuch darin empfehlungen zu geben.

Also eigentlich ist das für mich selber.

Kommentar von eao44 ,

Nicht das wir uns evtl. missverstehen. Ich werde, falls Sie das hinbekommen oder erarbeiten selbstverständlich nicht als die meine augeben!!

Ich wollte nur ein Programm haben welches eben so funktioniert wie ich es mir vorstelle.

Kommentar von PWolff ,

(Sagen wir doch "du", wie in den allermeisten Internet-Foren üblich!)

Es ging mir hauptsächlich darum, dass ich mit solchen Sachen meine Brötchen verdiene, und wenn du das für Profit brauchst, würde ich mich verpflichtet sehen, Geld dafür zu nehmen.

Aber Bachelor-Arbeit ist was anderes, sag ich mal.

Hab die Datei leider nicht hier, muss mir das heute abend noch mal angucken.

Kommentar von PWolff ,

Hier ist sie:

http://www.file-upload.net/download-11758343/Risikoinventar.xlsm.html

Hab das Fenster "fixiert" / "eingefroren", sodass die Kopfzeilen immer sichtbar bleiben, und die Anmerkungen entsprechend verschoben

Wie es mit übereinanderliegenden Datenpunkten aussieht, müsstest du mal ausprobieren, d. h. ein wenig mit Größen und Formen herumspielen

Kommentar von PWolff ,

Prüfsummen:

user@machine:~/Downloads$ md5sum Risikoinventar.xlsm
8a13f36369bd8548b0d844c9bc4067ca Risikoinventar.xlsm
user@machine:~/Downloads$ sha1sum Risikoinventar.xlsm
e36c2a9c69c139c257a05472950b051bedb73eee Risikoinventar.xlsm
user@machine:~/Downloads$ sha256sum Risikoinventar.xlsm
2dc63f6e34323f914cb1864522c9e68300b06ef354ffef411606b886c6c7ed20 Risikoinventar.xlsm
Kommentar von PWolff ,

Zur Anpassung des Makros: es muss nach wie vor von der Tabelle mit den Daten getriggert werden (Tabelle "Risikoinventar"), es sind die Diagramme, die sich woanders befinden können.

Keine passende Antwort gefunden?

Fragen Sie die Community