Hey, ich bin neu in Foren und das ist mein erster Beitrag. Ich bin neu in Excel, aber habe in ThinkorSwim ein Denkschrift geschrieben.Wie man ein Bereichsbalkendiagramm erstellt
Wenn jemand mit einer Bereich Aktienkurve vertraut ist, ist das, was ich nachgehen werde.
Ich habe Code für ein Liniendiagramm gefunden und verwende es, aber es basiert darauf, wo der Preis zu einem bestimmten Zeitpunkt ist. Ich möchte dieses Liniendiagramm so ändern, dass nur Werte angezeigt werden, die über oder unter einem Bereich liegen, sodass es einem Candlestick-Diagramm ohne Dochte ähnelt. Sobald die Daten in diesen Bereich gelangen, möchte ich nur, dass sie aktualisiert wird, wenn in diesem Bereich ein neuer Höchst- oder Tiefstwert erreicht wird. Die Bereiche müssen voreingestellt werden (zB 50 Ticks). Sobald der Bereich überschritten ist, möchte ich die Daten im nächsten Bereich aufzeichnen und den Vorgang wiederholen. Zeit und Datum sollten ignoriert werden, und nur die Handlung basierend auf der Preisaktion.
Hat jemand irgendwelche Ideen?
Option Explicit
'Update the values between the quotes here:
Private Const sChartWSName = "Chart"
Private Const sSourceWSName = "Sheet1"
Private Const sTableName = "tblValues"
Public RunTime As Double
Private Sub Chart_Setup()
'Create the structure needed to preserve and chart data
Dim wsChart As Worksheet
Dim lstObject As ListObject
Dim cht As Chart
Dim shp As Button
'Create sheet if necessary
Set wsChart = Worksheets.Add
wsChart.Name = sChartWSName
'Set up listobject to hold data
With wsChart
.Range("A1").Value = "Time"
.Range("B1").Value = "Value"
Set lstObject = .ListObjects.Add(_
SourceType:=xlSrcRange, _
Source:=.Range("A1:B1"), _
xllistobjecthasheaders:=xlYes)
lstObject.Name = sTableName
.Range("A2").NumberFormat = "h:mm:ss AM/PM (mmm-d)"
.Columns("A:A").ColumnWidth = 25
.Select
End With
'Create the chart
With ActiveSheet
.Shapes.AddChart.Select
Set cht = ActiveChart
With cht
.ChartType = xlLine
.SetSourceData Source:=Range(sTableName)
.PlotBy = xlColumns
.Legend.Delete
.Axes(xlCategory).CategoryType = xlCategoryScale
With .SeriesCollection(1).Format.Range
.Visible = msoTrue
.Weight = 1.25
End With
End With
End With
'Add buttons to start/stop the routine
Set shp = ActiveSheet.Buttons.Add(242.25, 0, 83.75, 33.75)
With shp
.OnAction = "Chart_Initialize"
.Characters.Text = "Restart Plotting"
End With
Set shp = ActiveSheet.Buttons.Add(326.25, 0, 83.75, 33.75)
With shp
.OnAction = "Chart_Stop"
.Characters.Text = "Stop Plotting"
End With
End Sub
Public Sub Chart_Initialize()
'Initialize the routine
Dim wsTarget As Worksheet
Dim lstObject As ListObject
'Make sure worksheet exists
On Error Resume Next
Set wsTarget = Worksheets(sChartWSName)
If Err.Number <> 0 Then
Call Chart_Setup
Set wsTarget = Worksheets(sChartWSName)
End If
On Error GoTo 0
'Check if chart data exists
With Worksheets(sChartWSName)
Set lstObject = .ListObjects(sTableName)
If lstObject.ListRows.Count > 0 Then
Select Case MsgBox("You already have data. Do you want to clear it and start fresh?", vbYesNoCancel, "Clear out old data?")
Case Is = vbYes
'User wants to clear the data
lstObject.DataBodyRange.Delete
Case Is = vbCancel
'User cancelled so exit routine
Exit Sub
Case Is = vbNo
'User just wants to append to existing table
End Select
End If
'Begin appending
Call Chart_AppendData
End With
End Sub
Private Sub Chart_AppendData()
'Append data to the chart table
Dim lstObject As ListObject
Dim lRow As Long
With Worksheets(sChartWSName)
Set lstObject = .ListObjects(sTableName)
If lstObject.ListRows.Count = 0 Then
lRow = .Range("A1").End(xlDown).Row
End If
If lRow = 0 Then
lRow = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Row
End If
If lRow > 2 Then
If .Range("B" & lRow - 1).Value = Worksheets(sSourceWSName).Range("C10").Value Then
'Data is a match, so do nothing
Else
'Data needs appending
.Range("A" & lRow).Value = CDate(Now)
.Range("B" & lRow).Value = Worksheets(sSourceWSName).Range("C10").Value
End If
Else
'Data needs appending
.Range("A" & lRow).Value = CDate(Now)
.Range("B" & lRow).Value = Worksheets(sSourceWSName).Range("C10").Value
End If
End With
RunTime = Now + TimeValue("00:00:01")
Application.OnTime RunTime, "Chart_AppendData"
End Sub
Public Sub Chart_Stop()
'Stop capturing data
On Error Resume Next
Application.OnTime EarliestTime:=RunTime, Procedure:="Chart_AppendData", Schedule:=False
End Sub
Eine Möglichkeit, die beim Ändern von Bereichen für Diagramme funktioniert, ist das Filtern des Inhalts. Wenn Sie den Bereich für das Diagramm festlegen, würden Sie A) das Blatt filtern, B) den Bereich basierend auf Ihren Parametern auswählen, C) in einem Diagramm ausgeben. Durch Filtern/Verbergen werden Werbebuchungen im Diagramm nicht sichtbar. – Cyril
Können Sie bitte ein Beispiel zeigen? –
Ich versuche, das Diagramm hochzuladen, um Ihnen zu zeigen, was ich habe, aber kann nicht herausfinden, wie es geht –