Board logo

標題: [發問] 如何應用 VBA 將股票圖完整的呈現出來? [打印本頁]

作者: c_c_lai    時間: 2012-4-23 07:07     標題: 如何應用 VBA 將股票圖完整的呈現出來?

本帖最後由 c_c_lai 於 2012-4-23 07:19 編輯

如何應用撰寫 VBA 程式將股票圖完整的呈現出來?

這個議題著實也想了一陣子,怎麼畫也只能單純地繪製出一個原始的股票圖,
先別說是再加入其它,如:成交量等,連基本的時間軸也無從同時加入 (請參考附上程式)。
我指的是應用 VBA 來撰寫,而不是直接以 EXCEL 上列的圖表製作。

請教可有否解決之道嗎?
1) 將時間軸能予以同時匯入。
2) 再增加一項  成交量數列,並以 .ChartType = xlColumnClustered 的方式表達 (副座標值)。

附上檔案,謝謝各位先進指教!

[attach]10596[/attach]
[attach]10597[/attach]
作者: alexliou    時間: 2012-4-23 14:56

回復 1# c_c_lai
這可以利用 xlStockVOHLC的ChartType來完成
假設日期在A欄,成交量在B欄, 開高低收分別在CDEF欄

n = Range("A1").End(xlDown).Row
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlStockVOHLC       '自動會把日期和成交量帶進去        
ActiveChart.SetSourceData Source:=Range("A1:F" & n)         
With ActiveChart
        .HasLegend = False
        .Axes(xlCategory).CategoryType = xlCategoryScale    'X軸設為Category, 為避免有些日期無交易而造成圖形不連續
End With
作者: alexliou    時間: 2012-4-23 15:25

本帖最後由 alexliou 於 2012-4-24 17:47 編輯

分成兩步做 且用到xlColumnClustered也是可以
這次加上顏色  上漲Bar用紅色 下跌用藍色

假設日期在A欄, 開高低收分別在BCDE欄, 成交量在F欄

Dim n As Integer
n = Range("A1").End(xlDown).Row
  ActiveSheet.Shapes.AddChart.Select
  ActiveChart.SetSourceData Source:=Range("A1:E" & n)
  ActiveChart.ChartType = xlStockOHLC       '自動會把日期帶進去
  
ActiveChart.ChartGroups(1).UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
ActiveChart.ChartGroups(1).DownBars.Format.Fill.ForeColor.RGB = RGB(0, 32, 96)
   
ActiveChart.SeriesCollection.Add Source:=Range("F2:F" & n)    '不包含標題列, 要從2開始
ActiveChart.SeriesCollection(5).ChartType = xlColumnClustered
   
With ActiveChart
        .HasLegend = False
        .Axes(xlCategory).CategoryType = xlCategoryScale
End With
作者: alexliou    時間: 2012-4-23 15:36

本帖最後由 alexliou 於 2012-4-24 17:48 編輯

另外一種設顏色的方法

n = Range("A1").End(xlDown).Row
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("A1:E" & n)
ActiveChart.ChartType = xlStockOHLC
   
ActiveChart.SeriesCollection.Add Source:=Range("F2:F" & n)   '不包含標題列 要從2開始
ActiveChart.SeriesCollection(5).ChartType = xlColumnClustered
   
With ActiveChart
        .HasLegend = False
        .Axes(xlCategory).CategoryType = xlCategoryScale
End With
   
With ActiveChart.ChartGroups(2)      '注意, ChartGroup在插入成交量直條後變成2了
'如果在插入成交量直條前則要改為1, the sequence of code matters         
            .UpBars.Interior.Color = RGB(255, 0, 0)
            .DownBars.Interior.Color = RGB(0, 32, 96)
End With
作者: c_c_lai    時間: 2012-4-23 21:06

回復 4# alexliou
為了方便您瞭解我測試的資料內容,一一將它們列示出來,並且只保留30筆資料做為測試之用。
程式中我也遵照您的說明加以修正。
成交量業已順利崁入 (副座標值), 並以 xlColumnClustered 方式呈現 (如附圖)。
接下來我想做的測試是再加上 5MA、20MA、60MA 這三條均線在 股票圖上 (均為主座標值),
我有測試過但都不成功,甚至連K線圖本身也都會不見。 附上程式碼有空時幫我增添進去測試,
我想是某些地方觀念不正確,沒寫對吧! 謝謝您!
  1.      日期                時間        開盤價        最高價        最低價        成交價        成交量        5MA        20MA        60MA
  2. 20120418        11:01        7155        7162        7154        7162        490                7153         7151         7158
  3. 20120418        11:02        7162        7162        7158        7160        206                7155         7152         7158
  4. 20120418        11:03        7160        7164        7160        7163        295           7157         7152         7158
  5. 20120418        11:04        7163        7164        7159        7160        196                7160         7153         7158
  6. 20120418        11:05        7160        7161        7158        7160        118                7161         7153         7158
  7. 20120418        11:06        7160        7161        7157        7158        125                7160         7154         7158
  8. 20120418        11:07        7158        7160        7157        7157        77                7160         7154         7158
  9. 20120418        11:08        7157        7158        7156        7157        121            7158         7155         7158
  10. 20120418        11:09        7157        7159        7157        7159        60                7158         7155         7157
  11. 20120418        11:10        7159        7160        7158        7158        73                7158         7156         7157
  12. 20120418        11:11        7158        7159        7157        7159        114                7158         7156         7157
  13. 20120418        11:12        7159        7161        7158        7160        88                7159         7157         7157
  14. 20120418        11:13        7160        7160        7155        7158        184                7159         7157         7156
  15. 20120418        11:14        7158        7162        7158        7161        122                7159         7157         7156
  16. 20120418        11:15        7161        7161        7155        7155        143                7159         7157         7156
  17. 20120418        11:16        7155        7155        7148        7148        391            7156         7157         7156
  18. 20120418        11:17        7148        7152        7148        7151        166                7155         7157         7155
  19. 20120418        11:18        7151        7154        7151        7152        76                7153         7157         7155
  20. 20120418        11:19        7152        7153        7147        7150        278                7151         7157         7155
  21. 20120418        11:20        7150        7152        7148        7151        130                7150         7157         7155
  22. 20120418        11:21        7152        7152        7149        7151        110            7151         7156         7154
  23. 20120418        11:22        7151        7151        7148        7148        139                7150         7156         7154
  24. 20120418        11:23        7148        7149        7145        7149        317                7150         7155         7154
  25. 20120418        11:24        7149        7150        7147        7150        107                7150         7155         7154
  26. 20120418        11:25        7150        7150        7144        7146        382                7149         7154         7154
  27. 20120418        11:26        7146        7146        7133        7135        2139        7146         7153         7154
  28. 20120418        11:27        7135        7136        7132        7132        511                7142         7152         7154
  29. 20120418        11:28        7132        7135        7128        7133        850                7139         7150         7153
  30. 20120418        11:29        7135        7137        7132        7134        318         7136         7149         7153
  31. 20120418        11:30        7135        7135        7127        7127        396                7132         7148         7153
複製代碼
[attach]10613[/attach]
[attach]10614[/attach]
  1. Sub DrawAll()
  2.     Call drawStatistics
  3.     Call drawOmegaCharts
  4. End Sub

  5. Sub drawStatistics()
  6.     drawCharts ("統計圖表")
  7. End Sub

  8. Sub drawOmegaCharts()
  9.     drawCharts ("Omega")
  10. End Sub

  11. Sub removeCharts(st As String)
  12.     Dim oShape As Shape
  13.     Dim str As String
  14.    
  15.     str = ActiveSheet.Name
  16.     Sheets(st).Select
  17.    
  18.     For Each oShape In ActiveSheet.Shapes
  19.         If oShape.Type = 3 Then
  20.             oShape.Delete
  21.         End If
  22.     Next
  23.    
  24.     Sheets(str).Select
  25. End Sub

  26. Sub drawCharts(sta As String)
  27.     Dim str As String
  28.    
  29.     str = ActiveSheet.Name
  30.     Sheets(sta).Select

  31.     Call removeCharts(sta)

  32.     Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  33.     Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  34.     Selection.Borders(xlEdgeLeft).LineStyle = xlNone
  35.    
  36.     With Selection.Borders(xlEdgeTop)
  37.         .LineStyle = xlContinuous
  38.         .ColorIndex = 0
  39.         .TintAndShade = 0
  40.         .Weight = xlThin
  41.     End With
  42.    
  43.     Selection.Borders(xlEdgeBottom).LineStyle = xlNone
  44.    
  45.     With Selection.Borders(xlEdgeRight)
  46.         .LineStyle = xlContinuous
  47.         .ColorIndex = 0
  48.         .TintAndShade = 0
  49.         .Weight = xlThin
  50.     End With
  51.    
  52.     Call mainPowerForce(sta)
  53.    
  54.     Cells(1, 1).Select
  55.     Sheets(str).Select
  56. End Sub

  57. Sub mainPowerForce(sDraw As String)
  58.     Dim totalRows As Single
  59.     Dim counter, xRow, yCol, cHeight, cWidth, inLeft, inTop, inWidth As Integer
  60.     Dim text As String
  61.     Dim chartname As String

  62.     totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  63.     Sheets(sDraw).Select
  64.     Cells(1, 11).Value = totalRows
  65.       
  66.     ActiveSheet.Shapes.AddChart.Select
  67.                                              
  68.     With ActiveChart
  69.         
  70.         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$C$1:統計圖表!$F$" & totalRows)
  71.         '.SetSourceData Source:=Range(" 統計圖表!$C$1:統計圖表!$F$" & totalRows)
  72.         ' .ChartType = xlStockVOHLC              ' 股票圖   ( 會造成 記憶體不足 )
  73.         .ChartType = xlStockOHLC                 ' 股票圖
  74.                           
  75.          With .ChartGroups(1)
  76.              .UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
  77.              .DownBars.Format.Fill.ForeColor.RGB = RGB(0, 32, 96)
  78.         End With
  79.         
  80.         .SeriesCollection.Add Source:=Range("統計圖表!$G$1:統計圖表!$G$" & totalRows)
  81.         .SeriesCollection(5).Name = "=統計圖表!$G$1"
  82.         .SeriesCollection(5).ChartType = xlColumnClustered
  83.         
  84.         With .ChartGroups(2)      '注意, ChartGroup在插入成交量直條後變成 2 了
  85.             .UpBars.Interior.Color = RGB(255, 0, 0)
  86.             .DownBars.Interior.Color = RGB(0, 32, 96)
  87.         End With
  88.    
  89.                              
  90.         .Axes(xlCategory).CategoryType = xlCategoryScale
  91.         .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  92.         .Axes(xlCategory).MajorTickMark = xlNone
  93.         .Axes(xlCategory).TickLabelPosition = xlLow
  94.             
  95.         .Axes(xlValue).TickLabels.NumberFormatLocal = "0_ "                     ' 代表物件的格式代碼。
  96.    
  97.     End With

  98.     xRow = 3
  99.     yCol = 1
  100.     cHeight = 460
  101.     cWidth = 500
  102.     inLeft = 30
  103.     inTop = 30
  104.     inWidth = 378

  105.     text = "開盤價、最高價、最低價、收盤價"

  106.     chartname = Trim(Replace(ActiveChart.Name, ActiveSheet.Name, ""))
  107.     ActiveChart.ChartArea.Height = cHeight                           ' 將原本設定之高度調至適度位置
  108.     ActiveChart.ChartArea.Width = cWidth
  109.                
  110.     ActiveSheet.Shapes(chartname).Left = Cells(xRow, yCol).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  111.     ActiveSheet.Shapes(chartname).Top = Cells(xRow, yCol).Top
  112.       
  113.     With ActiveChart.PlotArea                    ' 實際繪圖區塊的範圍設定
  114.          .InsideLeft = inLeft
  115.          .InsideTop = inTop
  116.          .InsideWidth = inWidth
  117.     End With
  118.                
  119.     ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
  120.     ActiveChart.ChartTitle.text = text
  121.     ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
  122.         
  123.     ActiveChart.Legend.Position = xlCorner     ' 將圖表圖示從圖表最下方調整到圖表之右上角位置
  124. End Sub
複製代碼
[attach]10615[/attach]
作者: c_c_lai    時間: 2012-4-24 08:01

回復 4# alexliou
可以將以下貼文全部Copy至一個 .csv 檔,然後再點選此檔案就可以直接進入到 Excel,
謝謝您的幫忙!
  1. "日期","時間","開盤價","最高價","最低價","成交價","成交量","5MA","20MA","60MA"
  2. 20120418,11:01,7155,7162,7154,7162,490,7153,7151,7158
  3. 20120418,11:02,7162,7162,7158,7160,206,7155,7152,7158
  4. 20120418,11:03,7160,7164,7160,7163,295,7157,7152,7158
  5. 20120418,11:04,7163,7164,7159,7160,196,7160,7153,7158
  6. 20120418,11:05,7160,7161,7158,7160,118,7161,7153,7158
  7. 20120418,11:06,7160,7161,7157,7158,125,7160,7154,7158
  8. 20120418,11:07,7158,7160,7157,7157,77,7160,7154,7158
  9. 20120418,11:08,7157,7158,7156,7157,121,7158,7155,7158
  10. 20120418,11:09,7157,7159,7157,7159,60,7158,7155,7157
  11. 20120418,11:10,7159,7160,7158,7158,73,7158,7156,7157
  12. 20120418,11:11,7158,7159,7157,7159,114,7158,7156,7157
  13. 20120418,11:12,7159,7161,7158,7160,88,7159,7157,7157
  14. 20120418,11:13,7160,7160,7155,7158,184,7159,7157,7156
  15. 20120418,11:14,7158,7162,7158,7161,122,7159,7157,7156
  16. 20120418,11:15,7161,7161,7155,7155,143,7159,7157,7156
  17. 20120418,11:16,7155,7155,7148,7148,391,7156,7157,7156
  18. 20120418,11:17,7148,7152,7148,7151,166,7155,7157,7155
  19. 20120418,11:18,7151,7154,7151,7152,76,7153,7157,7155
  20. 20120418,11:19,7152,7153,7147,7150,278,7151,7157,7155
  21. 20120418,11:20,7150,7152,7148,7151,130,7150,7157,7155
  22. 20120418,11:21,7152,7152,7149,7151,110,7151,7156,7154
  23. 20120418,11:22,7151,7151,7148,7148,139,7150,7156,7154
  24. 20120418,11:23,7148,7149,7145,7149,317,7150,7155,7154
  25. 20120418,11:24,7149,7150,7147,7150,107,7150,7155,7154
  26. 20120418,11:25,7150,7150,7144,7146,382,7149,7154,7154
  27. 20120418,11:26,7146,7146,7133,7135,2139,7146,7153,7154
  28. 20120418,11:27,7135,7136,7132,7132,511,7142,7152,7154
  29. 20120418,11:28,7132,7135,7128,7133,850,7139,7150,7153
  30. 20120418,11:29,7135,7137,7132,7134,318,7136,7149,7153
  31. 20120418,11:30,7135,7135,7127,7127,396,7132,7148,7153
複製代碼

作者: GBKEE    時間: 2012-4-24 15:32

回復 6# c_c_lai
參考看看

[attach]10630[/attach]
作者: c_c_lai    時間: 2012-4-24 17:59

回復 7# GBKEE
再請教您:
(1) With Sheets("統計圖表")
            E = Application.Transpose(.Range(.[d1], .[d1].End(xlToRight)).Value)
    End With
    E 指的是 D1:H286 的範圍嗎?
(2) Ar 處裡的過程看得有點不甚瞭解,能否將過程稍加說明? 因它又延伸到了 Rng(2) 的處理,
    尤其是 Rng(1).Columns(Application.Match(Ar(xi), Rng(1).Rows(1), 0)) 指的是甚麼?
(3) 我將 If .Name = 副座標 And .Parent.SeriesCollection.Count > 1 Then .AxisGroup = 2
    這段增修成:
    If .Name = 副座標 And .Parent.SeriesCollection.Count > 1 Then
        .AxisGroup = 2
        .ChartType = xlColumnClustered    (如附圖)
    End If
    為什麼加了 xlColumnClustered,
    ' .MarkerBackgroundColorIndex = xlNone
    ' .MarkerForegroundColorIndex = xlNone
    ' .Smooth = False  這三項都必須予以 Marked?
(4) 當圖表不存在時,程式 (制定資料區) 執行到 .ChartObjects.Delete 會產生
    "執行階段錯誤 '1004'"  應用程式或物件定義上的錯誤,則必須先行將它 Marked 起來,等產生後,
    再將它回復,接下來因已產生圖表,所以在按製圖 (不管幾百下) 當然也就 OK 了。
    請位在無圖表時,應如何去避免此錯誤發生?
(5) 最後當然不得不承認您的圖表產生較有技巧性 (如附圖之上下比對),謝謝您的分享!
[attach]10635[/attach]
作者: alexliou    時間: 2012-4-24 18:45

本帖最後由 alexliou 於 2012-4-24 18:54 編輯

回復 5# c_c_lai
要增加5MA, 20MA, 50MA就和把成交量加上去一樣
可利用 SeriesCollection.Add 方法
假設5MA, 20MA, 50MA分別在H, I, J 欄

ActiveChart.SeriesCollection.Add Source:=Range("H2:J" & totalrows)
ActiveChart.SeriesCollection(6).ChartType = xlLine
ActiveChart.SeriesCollection(7).ChartType = xlLine
ActiveChart.SeriesCollection(8).ChartType = xlLine

資料序列6,7,8 (即5MA, 20MA, 50MA) 會與資料序列5(成交量)共用副座標軸
但5MA, 20MA, 50MA的刻度應與股價一致
所以需將副座標軸的刻度與主座標軸的刻度設為相同  
缺點是當成交量與股價的規模差太多時  
圖會看起來很奇怪 (所以成交量要取適當的單位, 讓它的值和股價不會差太多)
但我還找不出方法讓5MA, 20MA, 50MA與股價漲跌圖共用同一座標軸
作者: GBKEE    時間: 2012-4-24 20:54

回復 8# c_c_lai
(1)   E 指的是 D1 往右到最後有資料的範圍 ,  [d1].End(xlToRight)  如工作表上按下 Ctrl+-> 右方向鍵

(2)  Rng(1).Columns(Application.Match(Ar(xi), Rng(1).Rows(1), 0)) 指的是甚麼?   Rng(1).Columns(找到的欄)
Application.Match(Ar(xi), Rng(1).Rows(1), 0)->  工作表Match函數 在 Rng(1).Rows(1)-> Rng(1)的第一列  尋找 Ar(xi)

(3)   .ChartType = xlColumnClustered    有些屬性 並不是所有的圖形  都可以用的

(4) 當圖表不存在時,程式 (制定資料區) 執行到 .ChartObjects.Delete 會產生 "執行階段錯誤 '1004'"
2003版 不會有 是你的版本較嚴謹

(5) 捲軸 可縮短資料數, 直接打上數值也可以縮短資料數.
作者: c_c_lai    時間: 2012-4-24 21:12

回復 9# alexliou
我想要表達的是 ( '**************************************************************************************** ):
(1)  Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$C$1:統計圖表!$F$" & totalRows)  
       是指向 "時間軸、以及  開盤價、最高價、最低價、收盤價" 等。   
(2) Range("統計圖表!$H$1:統計圖表!$J$" & totalRows)
       是分別為 "5MA、20MA、以及 60MA" 等。
(3) Range("統計圖表!$G$1:統計圖表!$G$" & totalRows)
      是為  成交量。

目前我想將  (1) 和 (2) 設成  主座標軸, (3) 想將它設定為 副座標軸。
在此範例中,應如何正確去設定  .SeriesCollection(#).AxisGroup = 1 or 2 呢?
以及應該位在何處宣告始正確得宜?
敬請指教,謝謝您!
  1.     With ActiveChart
  2.         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$C$1:統計圖表!$F$" & totalRows)
  3.         '.SetSourceData Source:=Range(" 統計圖表!$C$1:統計圖表!$F$" & totalRows)
  4.         ' .ChartType = xlStockVOHLC              ' 股票圖   ( 會造成 記憶體不足 )
  5.         .ChartType = xlStockOHLC                 ' 股票圖
  6.         .SeriesCollection(1).AxisGroup = 1  ' ****************************************************************************************
  7.                           
  8.         .SeriesCollection.Add Source:=Range("統計圖表!$H$1:統計圖表!$J$" & totalRows)
  9.         .SeriesCollection(5).Name = "=統計圖表!$H$1"
  10.         .SeriesCollection(5).ChartType = xlLine
  11.         .SeriesCollection(6).Name = "=統計圖表!$I$1"
  12.         .SeriesCollection(6).ChartType = xlLine
  13.         .SeriesCollection(7).Name = "=統計圖表!$J$1"
  14.         .SeriesCollection(7).ChartType = xlLine
  15.         ' .SeriesCollection(2).AxisGroup = 1 '****************************************************************************************
  16.         
  17.         With .ChartGroups(1)
  18.              .UpBars.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
  19.              .DownBars.Format.Fill.ForeColor.RGB = RGB(0, 32, 96)
  20.         End With
  21.         
  22.         
  23.         .SeriesCollection.Add Source:=Range("統計圖表!$G$1:統計圖表!$G$" & totalRows)
  24.         .SeriesCollection(8).Name = "=統計圖表!$G$1"
  25.         .SeriesCollection(8).ChartType = xlColumnClustered
  26.         .SeriesCollection(8).AxisGroup = 2 '****************************************************************************************
  27.         
  28.         ' With .ChartGroups(2)      '注意, ChartGroup在插入成交量直條後變成 2 了
  29.         '     .UpBars.Interior.Color = RGB(255, 0, 0)
  30.         '     .DownBars.Interior.Color = RGB(0, 32, 96)
  31.         ' End With
  32.    
  33.                              
  34.         .Axes(xlCategory).CategoryType = xlCategoryScale
  35.         .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  36.         .Axes(xlCategory).MajorTickMark = xlNone
  37.         .Axes(xlCategory).TickLabelPosition = xlLow
  38.             
  39.         .Axes(xlValue).TickLabels.NumberFormatLocal = "0_ "                     ' 代表物件的格式代碼。
  40.    
  41.     End With
複製代碼
執行後,目前圖形變成如下之狀態:
[attach]10641[/attach]
作者: c_c_lai    時間: 2012-4-24 21:43

回復 10# GBKEE
這些觀念說明對我的確非常有幫助,
上頭我有一些撰寫認知上的瓶頸,請再幫我解惑吧!
謝謝您!
作者: GBKEE    時間: 2012-4-25 08:04

回復 12# c_c_lai
在圖表中 數列數大於2才可以指定副座標軸( Y座標)
AxisGroup 屬性XlAxisGroup 可以是這些 XlAxisGroup 常數之一。
xlPrimary             1  ( X座標 )
xlSecondary        2  ( Y座標)
  1. For Each E In ActiveSheet.Shapes
  2.                 If InStr(E.Name, "Option Button") Then
  3.                     If E.OLEFormat.Object.Value = 1 Then 副座標 = E.TopLeftCell(1, 0)
  4.                 End If
  5.             Next
  6.          ' 以上程式碼的目的在尋找 指定為 副座標 數列 的名稱
  7.             For xi = 1 To .SeriesCollection.Count
  8.                 With .SeriesCollection(xi)
  9.                    ' If .Name = "成交量" And .Parent.SeriesCollection.Count > 1 Then .AxisGroup = 2
  10.                     If .Name = 副座標 And .Parent.SeriesCollection.Count > 1 Then .AxisGroup = 2
  11.                     .Border.ColorIndex = Int(55 * Rnd) + 1  '亂數產生數列底色
  12.                     .Border.Weight = xlThin
  13.                     .Border.LineStyle = xlContinuous
  14.                     .MarkerStyle = xlNone
  15.                     .MarkerBackgroundColorIndex = xlNone
  16.                     .MarkerForegroundColorIndex = xlNone
  17.                     .MarkerStyle = xlNone
  18.                     .Smooth = False
  19.                     .MarkerSize = 2
  20.                     .Shadow = False
  21.                 End With
  22.             Next
複製代碼

作者: alexliou    時間: 2012-4-25 08:21

本帖最後由 alexliou 於 2012-4-25 08:24 編輯

回復 11# c_c_lai
1.  先提醒一下
.SeriesCollection.Add Source:=Range("統計圖表!$H$1:統計圖表!$J$" & totalRows)
.SeriesCollection.Add Source:=Range("統計圖表!$G$1:統計圖表!$G$" & totalRows)
這兩行的$H$1和$G$1 要改為 $H$2和$G$2, 要不然會造成和股價資料的不Match
C2會對應到H1和G1
這是因為用  .SeriesCollection.Add 方法時, 它不會幫你考慮到標題列

2.  在這個問題裡, 總共有三個 ChartGroups
第一個是股價開高收低的 漲跌圖 (其實也是折線圖的延伸)
第二個是5MA, 20MA, 60MA的折線圖
第三個是成交量的直條圖
(在成交量直條圖加入後, 直條圖變chartgroups(1), 漲跌圖變chartgroups(2), 折線圖變chartgroups(3),
我猜測 Excel給不同的圖形Type指定不同的優先順序)
       
如果漲跌圖和折線圖如果能共用一個數值座標軸, 而成交量用副座標軸, 那這個問題就算完美解決了       
但我試了幾次, 漲跌圖組一定要獨用一個數值座標軸 (把別的圖組指定使用漲跌圖組的座標軸都會發生錯誤訊息)       
所以均線圖組只能和成交量圖組共用一個座標軸
但這兩組資料的數值大小差異很大
而且均線圖組的座標軸刻度還要和漲跌圖組的座標軸刻度一樣 (看起來才有意義)
       
在這些限制條件下, 單用EXCEL的chart功能, 目前我找不出完美的解決方法
       
3. 另一個方法是把它拆成兩個圖, 漲跌和均線在一個圖上, 成交量在一個圖上, 然後把兩個圖上下連在一起
作者: c_c_lai    時間: 2012-4-25 08:54

回復 13# GBKEE
回復 14# alexliou

謝謝兩位的指導與幫忙,到目前為止,對於圖形的表達也有更深層地體會,
事後我會再反覆練習及捉摸體會,再次向兩位說聲 "感激兩位先進"!
作者: alexliou    時間: 2012-4-26 16:23

[attach]10689[/attach]我嘗試把兩個圖表連在一起
作者: c_c_lai    時間: 2012-4-26 17:24

回復 17# alexliou
    ActiveSheet.Shapes(chartname).Left = Cells(xRow + cHeight, yCol).Left  
    ActiveSheet.Shapes(chartname).Top = Cells(xRow + cHeight, yCol).Top
這樣的銜接方式蠻不錯的,不僅密合又美觀,再加上
        .Axes(xlValue, xlPrimary).MinimumScale = Int(sMin / 10) * 10
        .Axes(xlValue, xlPrimary).MaximumScale = Int(sMax / 10) * 10
        .Axes(xlValue, xlSecondary).MinimumScale = .Axes(xlValue, xlPrimary).MinimumScale
        .Axes(xlValue, xlSecondary).MaximumScale = .Axes(xlValue, xlPrimary).MaximumScale
的左右對稱,實在太感謝您有這樣的 Idea!
作者: konantw    時間: 2012-4-26 21:54

這個也是我一直想了解的, 看看大家是如何解決的
作者: ethan.tpe    時間: 2012-5-21 21:25

先收下慢慢研究, 感謝幾位大大 解了小弟的困惑
作者: davidliu9116    時間: 2012-9-27 11:37

非常好的參考
感謝分享
作者: barrykuo    時間: 2013-4-4 09:25

本帖最後由 GBKEE 於 2013-9-5 11:22 編輯

對於
c_c_lai
GBKEE
alexliou
的圖形合併討論很想學習,小學生的我沒法下載來觀摩,是否可以E-mail
作者: barrykuo    時間: 2013-5-5 11:25

回復 21# barrykuo

今天上網查一下xlStockVOHLC是什麼東東?
原來是這樣的意思。
xlStockVOHLC        91        成交量-開盤-最高-最低-收盤股價圖
一步一步學習,謝謝各位高手大大指導!
謝謝c_c_lai大大電子郵件的文件。
下面是XlChartType的說明
http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/f703a4f2-ebe9-4e05-b9bb-5c9955881971
Excel 開發人員參考資料
XlChartType 列舉 指定圖表類型。
名稱        值        描述
xl3DArea        -4098        立體區域圖
xl3DAreaStacked        78        立體堆疊區域圖
xl3DAreaStacked100        79        百分比堆疊區域圖
xl3DBarClustered        60        立體群組橫條圖
xl3DBarStacked        61        立體堆疊橫條圖
xl3DBarStacked100        62        立體百分比堆疊橫條圖
xl3DColumn        -4100        立體直條圖
xl3DColumnClustered        54        立體群組直條圖
xl3DColumnStacked        55        立體堆疊直條圖
xl3DColumnStacked100        56        立體百分比堆疊直條圖
xl3DLine        -4101        立體折線圖
xl3DPie        -4102        立體圓形圖
xl3DPieExploded        70        分裂式立體圓形圖
xlArea        1        區域圖
xlAreaStacked        76        堆疊區域圖
xlAreaStacked100        77        百分比堆疊區域圖
xlBarClustered        57        群組橫條圖
xlBarOfPie        71        圓形圖帶有子橫條圖
xlBarStacked        58        堆疊橫條圖
xlBarStacked100        59        百分比堆疊橫條圖
xlBubble        15        泡泡圖
xlBubble3DEffect        87        立體泡泡圖
xlColumnClustered        51        群組直條圖
xlColumnStacked        52        堆疊直條圖
xlColumnStacked100        53        百分比堆疊直條圖
xlConeBarClustered        102        群組圓錐柱圖
xlConeBarStacked        103        堆疊圓錐柱圖
xlConeBarStacked100        104        百分比堆疊圓錐柱圖
xlConeCol        105        立體圓錐條圖
xlConeColClustered        99        群組圓錐條圖
xlConeColStacked        100        堆疊圓錐條圖
xlConeColStacked100        101        百分比堆疊圓錐條圖
xlCylinderBarClustered        95        群組圓柱圖
xlCylinderBarStacked        96        堆疊圓柱圖
xlCylinderBarStacked100        97        百分比堆疊圓柱圖
xlCylinderCol        98        立體圓條圖
xlCylinderColClustered        92        群組圓錐條圖
xlCylinderColStacked        93        堆疊圓錐條圖
xlCylinderColStacked100        94        百分比堆疊圓條圖
xlDoughnut        -4120        環圈圖
xlDoughnutExploded        80        分裂式環圈圖
xlLine        4        折線圖
xlLineMarkers        65        含有資料標記的折線圖
xlLineMarkersStacked        66        含有資料標記的堆疊折線圖
xlLineMarkersStacked100        67        含有資料標記的百分比堆疊折線圖
xlLineStacked        63        堆疊折線圖
xlLineStacked100        64        百分比堆疊折線圖
xlPie        5        圓形圖
xlPieExploded        69        分裂式圓形圖
xlPieOfPie        68        子母圓形圖
xlPyramidBarClustered        109        群組金字塔柱圖
xlPyramidBarStacked        110        堆疊金字塔柱圖
xlPyramidBarStacked100        111        百分比堆疊金字塔柱圖
xlPyramidCol        112        立體金字塔條圖
xlPyramidColClustered        106        群組金字塔條圖
xlPyramidColStacked        107        堆疊金字塔條圖
xlPyramidColStacked100        108        百分比堆疊金字塔條圖
xlRadar        -4151        雷達圖
xlRadarFilled        82        填滿式雷達圖
xlRadarMarkers        81        含有資料標記的雷達圖
xlStockHLC        88        最高-最低-收盤股價圖
xlStockOHLC        89        開盤-最高-最低-收盤股價圖
xlStockVHLC        90        成交量-最高-最低-收盤股價圖
xlStockVOHLC        91        成交量-開盤-最高-最低-收盤股價圖
xlSurface        83        立體曲面圖
xlSurfaceTopView        85        曲面圖 (俯視)
xlSurfaceTopViewWireframe        86        曲面圖 (俯視、只顯示線條)
xlSurfaceWireframe        84        立體曲面圖 (只顯示線條)
xlXYScatter        -4169        散佈圖
xlXYScatterLines        74        含折線的散佈圖
xlXYScatterLinesNoMarkers        75        含折線但沒有資料標記的散佈圖
xlXYScatterSmooth        72        帶有平滑線的散佈圖
xlXYScatterSmoothNoMarkers        73        帶有平滑線但沒有資料標記的散佈圖
作者: lolomonster    時間: 2014-5-22 13:00

感謝大大的分享&討論,正好遇上這個問題。
在舊版本2003 似乎可以直接指定對應的坐標軸,新版的無法....
作者: lolomonster    時間: 2014-5-22 13:07

回復 16# alexliou
不好意思,我權限不足,是否能麻煩您文字分享呢? 謝謝
作者: c_c_lai    時間: 2019-1-11 16:49

回復 25# pkey1999
不太明瞭你的問題:
[attach]29939[/attach]
作者: c_c_lai    時間: 2019-1-13 07:23

回復 27# pkey1999
能否附上你的襠案?否則無從進入了解。
作者: pkey1999    時間: 2019-1-13 10:55

檔案凌亂   還不會更改




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)