Wie kann man die x-Achse einer Grafik variabel formatieren?

rambkue

Grünschnabel
Hallo Zusammen,

folgende Ausgangssituation:

Ich habe auf einem Tabellenblatt (heißt "Daten") eine Tabelle mit mehreren Spalten und Zeilen. In Spalte A steht das Datum mit Uhrzeit (meistens 1 Tag mit 1h-Abständen). In Spalte B, C, D, E, etc. stehen Messdaten (zugehörig zur Uhrzeit, z.B. der Strom).
Dann gibt es ein Tabellenblatt (heißt "Grafik"), wo ein x,y-Diagramm hinterlegt ist. In dieses Diagramm werden jetzt die Daten aus dem Tabellenblatt "Daten" eingelesen und zwar für die 24 Stunden eines Tages, so dass sich eine Tagesgang-Kennlinie ergibt (x-Achse = Zeit, d.h. 00:00 bis 24:00 und y-Achse = Strom, z.B. 0 bis 1000). Bis hierhin ist alles klar.

Nun möchte ich folgendes realisieren:

Neben der Grafik soll es ein Button oder eine Schaltfläche geben, welches ein Makro startet und folgendes ausführt. Es soll ein Eingabefenster erscheinen oder was ähnliches, wo man eine Startzeit und eine Endzeit festlegen kann (z.B. Startzeit = 12:00 und Endzeit = 18:00). Nun soll die x-Achse des Diagramms automatisch formatiert werden. D.h. ich will das eigentlich nicht immer manuell machen (über Rechtsklick Achse formatieren und Skalierung), sondern das soll über eine Eingabe variabel gestaltbar sein.

Kann mir da jemand helfen? Wie lautet der Befehl bzw. der Code dafür?

Gruß, rambkue
 
Hi,

hast du schonmal den Makro-Rekorder benutzt? Den kann man über Extras-> Makro-> Aufzeichnen starten.
Dann machst du einfach von Hand, was du später dem Makro aufbürden willst. Das ganze wird als Code dann in dem Modul gespeichert, das du beim Start spezifiziert hast.
Ich weiß auch nicht, wie der Befehl heißt, aber so bekommt man das meiste heraus.

ulki
 
Hi Ulki,

den Makrorekorder kenn ich auch. Habe da schon einiges ausprobiert. Aber was ich bei meiner Grafik erreichen will, ist eine Art Zoom-Werkzeug.

Will das mal kurz an einem Beispiel erklären:
Ich habe in der Spalte A ein Datum mit Uhrzeit (z.B. 01.01.05 00:00 bis 02.01.05 00:00, also genau einen Tag) und in der Spalte B die dazugehörigen Messdaten und zwar in einem Abstand von 1 Minute (d.h. 00:00, 00:01, 00:02,....23:59, 00:00). Nun habe ich eine Grafik, in der die Messdaten (y-Achse) über der Zeit (x-Achse) abgebildet werden und zwar für den ganzen Tag.
Wenn ich jetzt nur einen ganz bestimmten Zeitraum in der Grafik betrachten möchte (z.B. 12:00 bis 18:00), dann möchte ich das nicht manuell einstellen (über Rechtsklick 'Achse formatieren' und 'Skalierung'), sondern ich möchte das Zeitintervall über ein Eingabefenster variabel gestalten können.
Soll also so aussehen, dass neben der Grafik ein Button ist, dem ein Makro zugewiesen wird, das ein Eingabefenster zum Vorschein bringt, wo man eine Start- und Endzeit eingibt und abhängig von dieser Einstellung soll dann die x-Achse automatisch skaliert werden, so dass man dann in der Grafik nur den Zeitausschnitt sieht, den man zuvor festgelegt hat. Also eine Art Zoom-Werkzeug soll das werden.
 
Ist klar, aber kannst du über den Makrorekorder nicht an den Befehl kommen wie du die X-Achse verändern kannst? Den kannst du dann ja in dieses Skript einbauen. Also einmal von Hand verändern, den Befehl bekommen dort die einzugebenden Variablen an richtiger Stelle ergänzen und das Makro fertig basteln.
Hast du den schon versucht so an den Befehl zu kommen?

ulki
 
Hab mal folgendes gemacht:
Sub Zoom()
ActiveSheet.ChartObjects("Diagramm 3").Activate
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
.MinimumScale = 0.375
.MaximumScale = 0.583333333333333
.MinorUnit = 2.08333333333333E-02
.MajorUnit = 4.16666666666667E-02
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
End Sub

Das Problem ist jetzt, dass anstatt der Uhrzeit (hh:mm) eine Zahl verwendet wird. Aber ich möchte doch eine Uhrzeit eingeben und nicht eine Zahl.

Könntest Du mir jetzt erstmal sagen, wie ich so ein Eingabefenster realisiere (wie im Anhang dargestellt)? Wenn ich dann dort meinen Zeitraum eingegeben habe, soll er die x-Achse automatisch skalieren, d.h. er muss dann bei Minimum und MaximumScale eine Zahl eingeben. Da ich aber eine Uhrzeit im Format hh:mm eingeben will, muss er das irgendwie intern umrechnen in eine Zahl, die dann meine Uhrzeit entspricht. Und da weiß ich jetzt nicht weiter, wie das jetzt intern geregelt werden muss.
 

Anhänge

  • Eingabe.jpg
    Eingabe.jpg
    4,7 KB · Aufrufe: 265
Möchtest du das ganze neben der Grafik auf dem Blatt der Tabelle eingeben, oder ein extra Formular dafür hernehmen?
Ich denke als Formular wird es komplizierter. Bin mir aber nicht sicher, da ich selbst sowas noch nie gemacht habe. Wenn du es auf dem Blatt der Tabelle machst, kannst du ja einfach in zwei Zellen die "Überschriften" schreiben und im Makro dann die Zellen dahinter auslesen. Ich meine es ist auch möglich Buttons auf dem Tabellenblatt zu platzieren mit denen man dann das Makro verknüpft. Dann wäre auch ein "Abbrechen" Button nicht nötig, und man könnte es so oft wiederholen wie man lustig ist. ;-)
Mit dem Umrechnen ist natürlich so eine Sache. Ich weiß auch nicht genau, wie das intern geregelt ist, aber mit ein wenig rumprobieren müsste man es eigentlich herausbekommen können.
Ich denke am besten wäre, wenn du das Auslösen des Makros schreibst, das ändern der x-Achse mit Variablen versiehst und dann versuchst herauszufinden, wie die Uhrzeit in eine Stunde umzurechnen ist.
(Ich gehe doch richtig in der Annahme, dass die Uhrzeit auf der x-Achse die jeweiligen Messpunkte angibt? Möglicherweise, ist das ganze anders gespeichert. Der Wert, der angezeigt wird mit relativen Koordinaten und dann die Werte, die an den Achsen anzuzeigen sind. Den sonst müsste Excel ja auch jedesmal umrechnen, wenn du von Hand die Achse veränderst. Sollte das der Fall sein, müsstest du im grunde nur mit deiner Uhrzeit an diese Datenstruktur gehen und dir dort die relative Koordinate suchen. Aber das ist jetzt rein hypotetisch!)

ulki
 
Das ist eigentlich egal. Ein Formular ist sicherlich komplizierter, sieht aber schöner aus. Würde aber auch reichen, wenn man die Eingabe neben der Grafik machen kann.
Du gehst richtig in der Annahme, dass die Uhrzeit auf der x-Achse die jeweiligen Messpunkte angibt.
Nagut, ich sehe, dass Du in dieser Richtung auch noch nicht viel gemacht hast. Also, so wie ich.

Vielleicht gibt es ja jemanden hier in Forum, der schon einmal so etwas gemacht hat oder ähnliches und mir helfen kann.

Gruß, rambkue
 
Zurück