返回列表 上一主題 發帖

[發問] 類似移動指引線的效果

[發問] 類似移動指引線的效果

各位大大好:

小妹在使用EXCEL分析資料時出現有關圖表中資料標籤的困難,首先,若我們僅有一個變數要分析的話就沒有此問題,因為當電腦游標指向需要查詢處便會自動顯示資料標籤,如下圖一

各位大大好:

抱歉上面沒打完就按到送出了,超過三分鐘不能編輯><,下面是完整的內容~

小妹在使用EXCEL分析資料時出現有關圖表中資料標籤的困難,首先,若我們僅有一個變數要分析的話就沒有此問題,
因為當電腦游標指向需要查詢處便會自動顯示資料標籤,如下圖一



但是當變數資料一多的時候,EXCEL僅能顯示一個變數的資料標籤,使得在趨勢分析上相當困難,如下圖二



EXCEL也有顯示所有資料標籤的功能,但因為資料繁多使得圖表完全沒有可讀性,見圖三。



小妹嘗試很久也沒有僅顯示一筆資料標籤的功能,不知各位大大是否在程式中有方法可以讓EXCEL有類似下圖四看盤軟體中類似移動查價線的效果,



下圖五是小妹希望最後的功能以及附件,麻煩有勞各位大大,我很需要這個功能~~~



Index.zip (77.95 KB)

TOP

回復 3# c_c_lai

C大您好:

因為小妹才剛加入沒有多久,積分不夠下載附件,

請問有其他方法可以下載嗎><,還是只能等積分到50之後才能拜讀了:'( :'(

TOP

回復 5# stillfish00

S大您好:
非常感謝您,問題解決了><,但還不太熟悉物件模組的使用方法,小妹會好好研究的∼∼∼

Index.zip (93.02 KB)

TOP

回復 5# stillfish00
S大您好:
在研究的過程中小妹又遇到了以下問題QQ,請大大們幫忙解惑 ><

1.就是說折線圖中的XValues值是連續的,也就是XValues從2012/10/16~2015/9/16是不間斷的值,但因為股市會休市的關係,交易日期是不連續的,導致XValues大於總筆數720筆。
   因此indx指向日期會產生偏差。目前小妹的解決方式是將用A欄日期放到陣列(XValueOutZero)中,再用indx指向此陣列(XValueOutZero)。下面是小妹加的程式碼
  1. Private Sub myChartClass_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
  2.     Dim pt_x As Double, interval As Double, indx As Long
  3.     Dim arValues, XValueOutZero
  4.    
  5.     XValueOutZero = Range("A2:A721").Value
  6.     pt_x = 75 * x / ActiveWindow.Zoom
  7.     interval = myChartClass.PlotArea.InsideWidth / UBound(myChartClass.SeriesCollection(1).XValues) '傳回此陣列之維度之最高可用註標(索引)
  8.     indx = Application.RoundUp((pt_x - myChartClass.PlotArea.InsideLeft) / interval, 0)
  9.     indx = Application.Min(Application.Max(1, indx), UBound(myChartClass.SeriesCollection(1).XValues))
  10.    
  11.     With myChartClass.SeriesCollection
  12.         If .Count = 0 Then Exit Sub
  13.         For i = 1 To .Count
  14.             With .Item(i)
  15.                 .ApplyDataLabels Type:=xlDataLabelsShowNone
  16.                 .Points(indx).ApplyDataLabels Type:=xlDataLabelsShowValue
  17.                 .Points(indx).DataLabel.Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
  18.                 arValues = .Values
  19.                 If i <= myTarget.Cells.Count Then myTarget.Cells(i + 1).Value = arValues(indx)
  20.             End With
  21.         Next
  22.         'arValues = .Item(1).XValues
  23.         myTarget.Cells(1).Value = XValueOutZero(indx, 1)
  24.     End With
  25.     myVLine.Line.ForeColor.RGB = RGB(0, 0, 0)
  26.     myVLine.Line.Weight = 0.25
  27.     With myChartClass
  28.         If .Axes(xlCategory).AxisBetweenCategories Then
  29.             myVLine.Left = .PlotArea.InsideLeft + (indx - 0.5) * interval
  30.         Else
  31.             myVLine.Left = .PlotArea.InsideLeft + (indx - 1) * interval
  32.         End If
  33.     End With
  34. End Sub
複製代碼
但是這樣子又發現vline無法精準的指向正確的日期,如圖1,vline指向的日期應該是2015/5/16,但是卻顯示2015/5/19的日期:'(

2. 另外,myChartClass_MouseMove是在進入滑鼠在圖表中移動這個事件發生時所執行的程式,它需要有4個傳入值
  1. myChartClass_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
複製代碼
,但在滑鼠在圖表移動時並沒有執行其它程式碼,那麼 myChartClass_MouseMove 是怎麼得到這些傳入值的呢,這些傳入值又是什麼 ?

3. 最後想請問大大下面這段程式的用意是什麼 >< ?
  1.     With myChartClass
  2.         If .Axes(xlCategory).AxisBetweenCategories Then
  3.             myVLine.Left = .PlotArea.InsideLeft + (indx - 0.5) * interval
  4.         Else
  5.             myVLine.Left = .PlotArea.InsideLeft + (indx - 1) * interval
  6.         End If
  7.     End With
  8. End Sub
複製代碼
以上問題小妹百思不得其解,求助大大們,問題多又笨也請各位大大海涵:Q :Q

TOP

本帖最後由 栗栗子 於 2015-12-24 13:12 編輯

回復 10# stillfish00
非常感謝S大解惑,很抱歉之前忘記附檔了,這是第二個附件 Index_2.zip (91.7 KB)

1. 如 圖一,發現如果將vline指向座標2015/5/16,右方日期卻顯示2015/5/19,無法精準的對上座標。
   
    另外, Index_3.zip (92.06 KB) 這是用S大提供的修改過後的程式碼的附件,會出現型態不符合的error><

2.原來 Chart.MouseMove 事件會自動傳入值,感謝S大受教了 ~
    另外查了一些物件類別模組的使用方法,https://msdn.microsoft.com/zh-tw/library/office/ff192938.aspx
    還是不太理解,可以請大大舉一個簡單的例子說明一下嗎 > <

3.還有一個額外的問題,下面這一段程式碼,為什麼在計算 x 的 pt 時要再乘上 75 呢 ?  這個數字是怎麼來的 ?
  1. pt_x = 75 * x / ActiveWindow.Zoom
複製代碼
再麻煩大大了,非常感謝 : )

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題