2.4k Aufrufe
Gefragt in Tabellenkalkulation von
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

8 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von
Hi Karin,

nochmals Danke für deine Unterstützung!!

Das Macro ist angepasst und funktioniert einwandfrei.

Liebe grüße

Maart
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
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
0 Punkte
Beantwortet von
Hallo Karin,

da sitzt man den Vormittag vor dem Programm und brütet... :-)

Vielen lieben Dank - es funktioniert natürlich!

Danke

Maart
0 Punkte
Beantwortet von
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
...