automatische Diagrammerstellung in Excel 97
Hallo zusammen,
ich habe einen X-Datensatz und 8 Y-Datensätze in einer Tabelle eingebracht, die aus jeweils 9 untereinander liegenden Zellen bestehen:
Z. B.
Spalte L Spalte O Spalte P Spalte V
Z. 16: A B C D ....... I
Z. 17: Abs Abs Abs Abs ..... Abs
Z. 18: 0,09800 0,00123 -1,234 0,683 -0,0345
0,08791 0,00101
0,07474 0,00097
0,06382 0,00076
0,04672 0,00064
0,03765 0,00052
0,02355 0,00026
0,00000 0,00000 0,0000 0,0000 0,0000
Z. 26: 0,00000 0,00000 0,0000 0,0000 0,0000
X-Werte für B-I Y-Werte B Y-Werte C Y-Werte D ..... Y-Werte I
Die Y-Datensätze können negativ (-1,...) wie auch positiv sein, die X-Werte sind immer positiv und kleiner 1.
Nun meine Frage: Wenn ich auf die Zelle mit dem Namen "C" in der Zeile 16, Spalte P mit der Maus klicke (aktive Zelle), so soll ein Diagramm mit diesen Wertepaaren aus A (X-Wert) und C (Y-Wert) im Diagramm dargestellt werden, Diagrammtyp: Punkte mit interpolierten Linien, die Achsenfomatierung - Dezimalstellen 3, und Legende, hier C.
Sobald die aktive Zelle z. B. "D" wäre, so sollte das Diagramm von "D" erstellt sein A (X-Wert) und D (Y-Wert). Das Diagramm sollte immer an der gleichen Position über den Zellen R2 bis R14 - V2 bis V14 dargestellt werden.
Ist weder eine Zelle mit den Namen B bis I aktiv, so soll kein Diagramm erstellt werden.
Ich hoffe, es ist nicht allzusehr verklausoliert dargestellt worden.
Es wäre schön, wenn dies auch ohne VBA durchzuführen wäre - habe aber wenig Hoffnung, ob es überhaupt funktioniert
Danke für eure Hilfe
Gruß Maart
Antwort schreiben
Antwort 1 von Beverly vom 12.03.2021, 08:50 Options
Hi Maart,
ohne VBA ist es nicht möglich, ein Diagramm zu erstellen bzw. wieder zu löschen/auszublenden.
Was jedoch man ohne VBA-machen kann ist, das Diagramm dynamisch zu gestalten, sodass jeweils nur die Werte aus einer der Spalten dargestellt werden. Für diese Darstellungsweise findest du auf meiner HP, Seite "Diagramme" das Beispiel
Dynamisches Diagramm2.
Bis später,
Karin
Antwort 2 von Maart vom 12.03.2021, 18:26 Options
Hallo Karin,
mit kleinen Änderungen funktioniert es wunderbar - vielen Dank für die Info und deiner Hilfe!! Die indirekte Adressierung war der absolute Bringer!
Nur interessehalber: Kannst Du auch ein VBA aus dem "Ärmel" zaubern mit diesen Bedingungen (oder ähnlich)??
Ich tue mich noch schwer VBA so einzusetzen, dass es auch ohne Probleme läuft...
Liebe grüße
Maart
Antwort 3 von Beverly vom 13.03.2021, 18:39 Options
Hi Maart,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim chDiagramm As Chart
Dim loLetzte As Long
If Target.Row = 16 Then
If Target.Column = 15 Or Target.Column = 16 Or Target.Column = 22 Then
Set chDiagramm = ActiveSheet.ChartObjects(1).Chart
loLetzte = IIf(IsEmpty(Cells(Rows.Count, Target.Column)), Cells(Rows.Count, Target.Column).End(xlUp).Row, Rows.Count)
With chDiagramm.SeriesCollection(1)
.Values = Range(Cells(18, Target.Column), Cells(loLetzte, Target.Column))
.Name = Cells(16, Target.Column)
End With
Set chDiagramm = Nothing
End If
End If
End Sub
Die Spaltennummern musst du anpassen/erweitern.
Bis später,
Karin
Antwort 4 von maart1 vom 15.03.2021, 12:49 Options
Hi Karin,
nochmals Danke für deine Unterstützung!!
Das Macro ist angepasst und funktioniert einwandfrei.
Liebe grüße
Maart
Antwort 5 von maart1 vom 24.03.2021, 14:06 Options
Hi Karin,
das Makro läuft einwandfrei... aber...
Ich möchte den Text-Inhalt aus der aktiven Zelle (Zeile 16, Spalte 15-22, 28-31 jeweils DropDown-Menüs) in die Zelle F29 kopieren, dort wird weiter mit der Funktion "Gültigkeit" gearbeitet. Nachdem Copy soll die "alte" ursprüngliche aktuelle Zelle wieder aktiv werden.
Beispiel:
Aktive Zelle ist (über Maus oder Cursor) z. B. R16, (Spalte 18), nur den Text-Inhalt in F29 kopieren, Diagramm aktualisieren (funktioniert einwandfrei), R16 wieder oder immer noch aktiv, sodass ich weiter zur nächsten Zelle (S16 oder Q16) gehen kann, dort wiederholt sich das...
Habe mich bislang vergeblich versucht, diese VBA zum Laufen zu bringen....
Hier mein Listning, mein Eintrag ist mit # gekennzeichnet :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim chDiagramm As Chart
Dim loLetzte As Long
If Target.Row = 16 Then
If Target.Column = 15 Or Target.Column = 16 Or Target.Column = 17 Or Target.Column = 18 Or Target.Column = 19 Or Target.Column = 20 Or Target.Column = 21 Or Target.Column = 22 Or Target.Column = 28 Or Target.Column = 29 Or Target.Column = 30 Or Target.Column = 31 Then
Selection.Copy ' #
Range("F29").Select ' #
ActiveSheet.Paste ' #
Application.CutCopyMode = False ' #
Set chDiagramm = ActiveSheet.ChartObjects(2).Chart
loLetzte = IIf(IsEmpty(Cells(Rows.Count, Target.Column)), Cells(Rows.Count, Target.Column).End(xlUp).Row, Rows.Count)
With chDiagramm.SeriesCollection(1)
.Values = Range(Cells(18, Target.Column), Cells(loLetzte, Target.Column))
.Name = Cells(16, Target.Column)
End With
Set chDiagramm = Nothing
End If
End If
Application.Goto Cells(16, Target.Column) ' #
Application.CutCopyMode = False ' #
End Sub
-----------------------------------------------------------
Hättest Du einen Vorschlag???
Danke für Deine Hilfe
Maart
Antwort 6 von Beverly vom 24.03.2021, 15:58 Options
Hi Maart,
in VBA kann zu 99% auf Select/Activate verzichtet werden. Ändere diesen Teil
Selection.Copy ' #
Range("F29").Select ' #
ActiveSheet.Paste ' #
Application.CutCopyMode = False ' #
in diesen
Range("F29") = Selection
Und diesen Teil:
Application.Goto Cells(16, Target.Column) ' #
Application.CutCopyMode = False ' #
kannst du m.E. weglassen.
Bis später,
Karin
Antwort 7 von maart1 vom 24.03.2021, 17:44 Options
Hallo Karin,
da sitzt man den Vormittag vor dem Programm und brütet... :-)
Vielen lieben Dank - es funktioniert natürlich!
Danke
Maart
Antwort 8 von maart1 vom 27.03.2021, 17:19 Options
Hallo Karin,
könnte ich nochmal um deine Hilfe bitten...?
Ich möchte am rechten Blattrand eine senkrechte schwarze Linie für den Blattausdruck setzen.
Nach dem dieses Blatt augedruckt worden ist soll diese schwarze Linie wieder gelöscht werden.
Ich möchte eine "gezeichnete" Linie verwenden, da in diesem Bereich auch unterschiedliche Rahmen sich befinden -
und eine "gezeichnete" Linie ist einfacher zu erstellen und zu löschen - dachte ich....
Linie zu erstellen - ja, der Printer Ausdruck ist auch okay - nur die Linie kann ich anschließend nicht
durch VBA löschen lassen - wo ist mein Fehler??
Danke im voraus für deine Hilfe,
Maart
Hier mein VBA-Code:
' Setze am rechten Rand des Blattes eine schwarze Begrenzungslinie
ActiveSheet.Shapes.AddLine(701.25, 1.5, 701.25, 438.75).Select
Selection.ShapeRange.Line.Weight = 1.5
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Style = msoLineSingle
Range("J12").Select
' Ausdruck der Seite auf einen Drucker
Worksheets("Blatt1").Activate
Range("A1:V32").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$V$32"
ActiveSheet.PrintOut , 1, 1
' Begrenzungslinie wieder löschen ### hier ist mein Problem ###
Worksheets("Blatt1").Activate
ActiveSheet.Shapes("Line 156").Select
Selection.Delete
Range("E31").Select