標題:
[發問]
圖表 chart 內趨勢線的資料點之 Top Left 座標 VBA如何取得
[打印本頁]
作者:
Scott090
時間:
2014-8-14 20:22
標題:
圖表 chart 內趨勢線的資料點之 Top Left 座標 VBA如何取得
敬請賢達指導:
下列新加一趨勢線,資料點在 Array 內,執行畫趨勢線後如何取得個資料點的 top left 座標值?
謝謝
ActiveChart.SeriesCollection.NewSeries.Select
With Selection
.Name = "=""AAAA"""
.XValues = Array(0.12,0.13, 0.14,0.15) 'x_category
.Values = Array(2.2,2.1,1.8,1.5) 'y_value
.MarkerStyle = -4142
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Weight = 3#
End With
End With
作者:
GBKEE
時間:
2014-8-15 08:26
回復
1#
Scott090
是這樣嗎?
Option Explicit
Sub Ex()
Dim X, Y
With ActiveChart.SeriesCollection.NewSeries
.XValues = Array(0.12, 0.13, 0.14, 0.15) 'x_category
.Values = Array(2.2, 2.1, 1.8, 1.5) 'y_value
X = .XValues 'X軸數值
Y = .Values 'Y軸數值
MsgBox "Top= " & X(1) & " ,Left= " & Y(1)
End With
End Sub
複製代碼
作者:
Scott090
時間:
2014-8-15 21:50
回復
2#
GBKEE
謝謝指導
能否轉化為 相對於chartarea 或 plotarea 的 top left (也許是視窗座標吧? 不確定叫甚麼)
例如 .top = 250
.left = 55
再感恩
作者:
Scott090
時間:
2014-8-16 07:57
本帖最後由 Scott090 於 2014-8-16 08:10 編輯
回復
2#
GBKEE
'特定資料點(0.15,1.5) 的 Top, Left 如何取得??
請參考附件, 謝謝
作者:
Scott090
時間:
2014-8-16 08:16
回復
3#
Scott09
附件
作者:
GBKEE
時間:
2014-8-17 07:27
本帖最後由 GBKEE 於 2014-8-17 07:28 編輯
回復
5#
Scott090
特定資料點(0.15,1.5) 的 Top, Left 如何取得, 功力不夠幫不上忙.
如圖: 滑鼠移到資料點可顯示出資料點的數值,為何還要加上說明.
[attach]18934[/attach]
作者:
Scott090
時間:
2014-8-17 08:00
回復
6#
GBKEE
謝謝大師熱心地回應
作者:
GBKEE
時間:
2014-8-18 10:40
回復
7#
Scott090
幫你練一下功,試試看
Option Explicit
Sub Ex()
Dim X(), Y(), XLeft As Single, Ytop As Single, i As Integer
Dim P As PlotArea, C As Chart, S As Shapes
Set C = ActiveSheet.ChartObjects(1).Chart '指定圖表
Set P = C.PlotArea
X = C.SeriesCollection(1).XValues 'X軸數值
Y = C.SeriesCollection(1).Values 'Y軸數值
i = 3 '指定數值點.
With C.Axes(1) 'xlCategory 'X軸
XLeft = P.InsideWidth / (.MaximumScale - .MinimumScale)
'點數間距的寬度
End With
With C.Axes(2) 'xlValue 'Y軸
Ytop = P.InsideHeight / (.MaximumScale - .MinimumScale)
''點數間距的高度
End With
XLeft = P.InsideLeft + (XLeft * X(i))
Ytop = P.InsideTop + P.InsideHeight - (Ytop * Y(i))
Set S = C.Shapes
If S.Count <> 0 Then
C.Parent.Activate
S.SelectAll
Selection.Delete
End If
With C.Shapes.AddShape(msoShapeRectangle, Left:=XLeft, Top:=Ytop, Width:=100, Height:=50)
.TextFrame.Characters.Text = "附加說明1:" & Chr(10) & "X: " & X(i) & Space(5) & "Y: " & Y(i)
End With
C.Parent.Parent.Activate
End Sub
複製代碼
作者:
Scott090
時間:
2014-8-18 21:12
本帖最後由 Scott090 於 2014-8-18 21:14 編輯
回復
8#
GBKEE
非常感恩大師熱情的指導
由 PlotArea 視窗直接計算資料點位置一定是非常的穩健的做法
另,有找到資料點的屬性 Points().top Points().left,其穩健性如何不得而知,大膽列出來給參考:
Sub Ex2()
Dim X(), Y(), XLeft As Single, Ytop As Single, i As Integer
Dim P As PlotArea, C As Chart, S As Shapes
Set C = ActiveSheet.ChartObjects(1).Chart '指定圖表
X = C.SeriesCollection(1).XValues 'X軸數值
Y = C.SeriesCollection(1).Values 'Y軸數值
i = 3 '指定數值點.
Ytop = C.SeriesCollection(1).Points(i).Top '資料點 i 的 Top 值
XLeft = C.SeriesCollection(1).Points(i).Left '資料點 i 的 left 值
With C.Shapes.AddShape(msoShapeRectangle, Left:=XLeft, Top:=Ytop, Width:=100, Height:=50)
.TextFrame.Characters.Text = "附加說明1:" & Chr(10) & "X: " & X(i) & Space(5) & "Y: " & Y(i)
End With
Range("E10").Select
End Sub
複製代碼
作者:
GBKEE
時間:
2014-8-19 07:18
回復
9#
Scott090
2003版Points沒有這些屬性
Ytop = C.SeriesCollection(1).Points(i).Top '資料點 i 的 Top 值
XLeft = C.SeriesCollection(1).Points(i).Left '資料點 i 的 left 值
複製代碼
試試看
Sub Ex()
Dim P As Point, C As Chart, i As Integer
Set C = ActiveSheet.ChartObjects(1).Chart '指定圖表
i = 2 '指定數值點
With C.SeriesCollection(1)
.HasDataLabels = True
.DataLabels.Delete
End With
Set P = C.SeriesCollection(1).Points(i)
P.ApplyDataLabels xlDataLabelsShowLabel, ShowValue:=True
With P.DataLabel
.Interior.ColorIndex = 35
.Characters.Text = "附加說明1: " & vbLf & .Characters.Text
End With
End Sub
複製代碼
作者:
Scott090
時間:
2014-8-19 08:03
回復
10#
GBKEE
利用資料標籤來顯示其他文字,實在高明
學習了,問題也解決了
辛苦了大師
謝謝
作者:
fei6999
時間:
2016-1-3 12:13
本帖最後由 fei6999 於 2016-1-3 12:15 編輯
回復 Scott090
特定資料點(0.15,1.5) 的 Top, Left 如何取得, 功力不夠幫不上忙.
如圖: 滑鼠移到資料 ...
GBKEE 發表於 2014-8-17 07:27
請問版主標示紅色框是顯示圖表數列及資料點,這個功能可以關掉不讓它顯示嗎?
作者:
Scott090
時間:
2016-1-4 23:41
回復
12#
fei6999
不太能了解你的意思,最好能貼一張圖說明
一般是趨勢圖做完了以後再變更屬性,用手動或VBA畫的就用VBA變更它
是否能畫圖前先關掉它,我不知道
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)