Excel < Tabellenkalkulationen < Anwendungsprogramme < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 21:56 Mo 02.07.2007 | Autor: | pamela |
Hallo,bitte um Hilfe!!
ich soll ein Pysik Experiment(Luftkissenbahn) implementieren, was die gemessenen Werte (Weg und Zeit bei einer Bewegung) sortiert, dannach soll das Pogramm noch die Geschwindigkeit und gegebenenfalls die Beschleunigung berechnen. Weiterhin soll die mittlere Geschwindigkeit, sowie die Standartabweichung der Geschwindigkeit berechnet werden.
Zum Schluss sollen die Werte in einem Weg/Zeit Diagramm dargestellt werden.
Vielen Dank für eure Hilfe
Dateianhänge: Anhang Nr. 1 (Typ: xls) [nicht öffentlich] Anhang Nr. 2 (Typ: xls) [nicht öffentlich]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:50 Mo 09.07.2007 | Autor: | Walty |
Hallo pamela
sollst Du ein VB - Makro schreiben, das die beschriebene Aufgabe löst, oder reicht es das mit Excel von Hand durchzuführen?
Die zweitere Lösung ist einfacher:
Bereich der Werte markieren, Daten>Sortieren..., in Spalte C Formel (C6)"=$A6/$B6" nach unten kopieren/füllen; in Spalte D Formel (D7)"=($C7-$C6)/($A7-$A6)" ebenfalls nach unten füllen.
Die Erstellung des Diagramms ist wohl etwas komplizierter zu beschreiben.
Für das VBA_MAkro bedien' Dich doch an den in den Makros in der 2.Datei enthaltenen Funktionen, die die Spalten füllen.
Ansonsten kannst Du Dich auch sn dem oben beschriebenen Lösungseweg entlanghangeln...
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 23:20 Mo 09.07.2007 | Autor: | pamela |
Also ich muss das in VBA programmieren, also aus der Datei2, die ich schon geschrieben habe, soll ich ein Weg-Zeit-Diagramm machen, nur jenachdem welche Anfangswerte man dort eingibt verändert man die Tabellenlänge, und das Programm soll die Länge selbst erkennen und dazu das Diagramm zeichnen. Also ein Buttom mit Diagramm dort soll man einfach nur draufklicken, das Programm sucht sich die Daten und erstellt dazu das Diagramm.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:35 Di 10.07.2007 | Autor: | Walty |
> Also ich muss das in VBA programmieren, also aus der
> Datei2, die ich schon geschrieben habe, soll ich ein
> Weg-Zeit-Diagramm machen, nur jenachdem welche Anfangswerte
> man dort eingibt verändert man die Tabellenlänge, und das
> Programm soll die Länge selbst erkennen und dazu das
> Diagramm zeichnen. Also ein Buttom mit Diagramm dort soll
> man einfach nur draufklicken, das Programm sucht sich die
> Daten und erstellt dazu das Diagramm.
achso,
ich bin kein VBA-crack, daher suche ich immer die Unterstützung des Makro-Recorders
- da muss man zumindest nicht mehr aufwändig nach den Objekten, Methoden und
wichtigen Eigenschaften suchen...
zuerst würde ich das Ende der Daten in Spalte B suchen
1: | for i=6 to 65000
| 2: | if (!activeWorksheet.cells(i,2) ) '# Rückgabewert war leer
| 3: | intLetzteZeile = i-1 '# Zeilennummer der letzten Zelle speichern
| 4: | Exit For '# Schleife verlassen
| 5: | end if
| 6: | Next
|
Dann liefert mir das Makro folgenden Code:
1: | Charts.Add
| 2: | ActiveChart.ChartType = xlXYScatterLines
| 3: | ActiveChart.SeriesCollection(1).XValues = "=Tabelle1!R6C4:R36C4"
| 4: | ActiveChart.SeriesCollection(1).Values = "=Tabelle1!R6C2:R36C2"
| 5: | ActiveChart.Location Where:=xlLocationAsObject, Name:="Tabelle1"
|
um das ganze etwas "bezüglicher" zu machen hab ichs 'n bischen umgeschriebt
1: | Set MyChartObj = ActiveWorkbook.Charts.Add
| 2: | MyChartObj.ChartType = xlXYScatterLines
| 3: | MyChartObj.Activate. |
bei meiner version werden aber anscheinend keine Datenreihen angelegt,
das ist aber auch gut so, da weiss ich wenigstens was da ist:
1: | MyChartObj.SeriesCollection.NewSeries
| 2: | MyChartObj.SeriesCollection(1).Values = Worksheets(1).Range(Worksheets(1).Cells(6, 2), _
| 3: | Worksheets(1).Cells(intLetzteZeile, 2)) 'Range-Objekt, Spalte B, der Weg, die Y-Werte
| 4: | MyChartObj.SeriesCollection(1).XValues = Worksheets(1).Range(Worksheets(1).Cells(6, 4), _
| 5: | Worksheets(1).Cells(intLetzteZeile, 4)) 'Range-Objekt, Spalte D, die Zeit, die X-Werte
|
Wenn ich jetzt kein extra Tabellenblatt für das Diagramm haben will,
dann verschiebe ich das Diagramm mit der "location"-Methode in das Tabellenblatt 1:
1: |
| 2: | MyChartObj.Location Where:=xlLocationAsObject, Name:="Tabelle1" |
leider geht durch Seiteneffekte dabei mein Kontext/Objekt irgendwie verloren,
also hole ich ihn mir wieder zurück:
1: |
| 2: | Set MyChartObj = ActiveChart |
für die Eigenschaften des Diagramms kannst Du dann mit dem Makrorecorder
und dem Diagramm-Assistenten rumspielen, bis Du das Gewünschte gefunden hast
hier nochmal vollständig:
1: | Sub Makro_make_Diagramm()
| 2: | Dim i, intLetzteZeile As Long
| 3: | Dim MyChartsObj As Object
| 4: |
| 5: | Worksheets("Tabelle1").Activate
| 6: |
| 7: | For i = 6 To 65000
| 8: | If (ActiveSheet.Cells(i, 2) = "") Then '#Rückgabewert leer
| 9: | intLetzteZeile = i - 1 '#Zeilennumerder letzten Zeile speichern
| 10: | Exit For '#damit nicht bis zum Ende geloopt wird
| 11: | End If
| 12: | Next
| 13: |
| 14: | Set MyChartObj = ActiveWorkbook.Charts.Add
| 15: | MyChartObj.ChartType = xlXYScatterLines
| 16: | MyChartObj.Activate
| 17: | MyChartObj.SeriesCollection.NewSeries
| 18: | MyChartObj.SeriesCollection(1).Values = Worksheets(1).Range(Worksheets(1).Cells(6, 2), Worksheets(1).Cells(intLetzteZeile, 2))
| 19: | MyChartObj.SeriesCollection(1).XValues = Worksheets(1).Range(Worksheets(1).Cells(6, 4), Worksheets(1).Cells(intLetzteZeile, 4))
| 20: |
| 21: | 'ActiveChart.SeriesCollection(1).Name =
| 22: | MyChartObj.Location Where:=xlLocationAsObject, Name:="Tabelle1"
| 23: | Set MyChartObj = ActiveChart
| 24: | With MyChartObj
| 25: | .HasTitle = True
| 26: | .ChartTitle.Characters.Text = "WegZeit Diagramm"
| 27: | .Axes(xlCategory, xlPrimary).HasTitle = True
| 28: | .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t in s"
| 29: | .Axes(xlValue, xlPrimary).HasTitle = True
| 30: | .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "s in m"
| 31: | End With
| 32: | With MyChartObj
| 33: | .HasAxis(xlCategory, xlPrimary) = True
| 34: | .HasAxis(xlValue, xlPrimary) = True
| 35: | End With
| 36: | MyChartObj.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
| 37: | With MyChartObj.Axes(xlCategory)
| 38: | .HasMajorGridlines = False
| 39: | .HasMinorGridlines = True
| 40: | End With
| 41: | With MyChartObj.Axes(xlValue)
| 42: | .HasMajorGridlines = True
| 43: | .HasMinorGridlines = False
| 44: | End With
| 45: | last = ActiveSheet.Shapes.Count '# zugriff auf Positionierung hat man über "shape"-Objekt aus der
| 46: | ' shapes-Auflistung - die letzte dazugekommene shape muss mein
| 47: | ' Diagramm sein - und das will ich nach rechts verscheiben
| 48: | ActiveSheet.Shapes(last).Left = ActiveSheet.Columns(15).Left
| 49: | ' dieser kram entfällt, genau wie oben die ".location"-Methode, wenn man das Diagramm auf einem eigenen Arbeitsblatt stehen lässt.
| 50: | End Sub
|
hth, (ein Hoch auf den Makrorecorder !!!)
Gruß Walty
btw: wennjemand sich mit der Objekthierarchie auskennt, kanner das bestimmt noch schöner machen, diese Lösung ist mehr oder weniger aus dem MR abgeschrieben.
Btw2: du solltes deine Makros Auto1 und 2 nochmal genau Ansehen, da stimmt irgendwas nicht mit der Zuordnung zu Arbeitsblättern, und die Abfragen sehen auch nicht in Ordnung aus, ohne dass ich Dir das jetzt konkret sagen kann... (z.B negative Geschwindigkeit wird nicht abgefangen)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 22:44 Mi 11.07.2007 | Autor: | pamela |
Hi Walty, danke erst mal für deine Hilfe, hoffe ich kann das auch mit dem Recorder, probier es gleich mal aus. Danke!!!!! :)
|
|
|
|