Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2019)
株価チャートに移動平均線を第一軸に表示したい
投稿日時: 22/08/14 09:13:24
投稿者: andoandoando

お世話になります。
 
株価チャートに移動平均線を追加したいです。
第二軸に表示することは可能なのですが、他のものを第二軸に表示したいので第一軸側に表示したいです。
ネットでの記載を参考に第一軸に書くように記載してみましたが、グラフは第二軸になってしまい、パラメータもdebug.printで調べると2軸と表示されます。
 
データは
A          B    C   D    E    F       Y      AA
日付          時間  始値    高値     安値     終値      MACD    移動平均線
2020.07.10    8:15    1800.74    1800.74    1798.61    1798.8
2020.07.10    8:30    1798.81    1798.81    1796.99    1797.46
2020.07.10    8:45    1797.41    1798.02    1795.69    1796.08
2020.07.10    9:00    1796.08    1798.99    1795.9    1796.28
 
のように入っています。(YとAAにも数字入っていますが省略しています)
 
Sub Sample4()
 
'■■■新しいグラフを作成■■■
With ActiveSheet.Shapes.AddChart.Chart
 
    .SetSourceData Range(Cells(2, 1), Cells(300, 6)) 'データ範囲を指定
     
   .ChartType = xlStockOHLC 'kabuグラフを指定
 
           With .SeriesCollection(2) '移動平均線
            .AxisGroup = xlPrimary '1軸を設定を指定
            .ChartType = xlLine '2つ目の系列のグラフの種類を折れ線に指定
            .Values = Range("AA2:AA300") 'データ範囲を指定
            .Name = MA1 '項目名を指定
 
            If .AxisGroup = xlPrimary Then
            Debug.Print "1軸"
            ElseIf .AxisGroup = xlSecondary Then
            Debug.Print "2軸"
            End If    
         End With
 
      With .SeriesCollection(3) 'MACD
            .ChartType = xlLine 'グラフの種類を折れ線に指定
            .Values = Range("Y2:Y300") 'データ範囲を指定
            .Name = Macd '項目名を指定
            .AxisGroup = xlSecondary '2軸を設定を指定
        End With
         
End With
 
End Sub
 
 
これで書こうとしても移動平均線が2軸となってしまいます。
 
解決方法わかりましたらお教えいただきたくよろしくお願いいたします。
 

回答
投稿日時: 22/08/14 11:06:37
投稿者: simple

詳細に確認していませんが、
・始値、高値、安値、終値が四つの系列をなしていて、
  それでひとつの纏まった表示をする仕組みになっていて、
・追加する、MAやMACDはそれとは異なるグループにする必要があるので、
  二軸を使う設定にしているものと思います。
そのあたりを確認されたらいかがでしょうか。
 
MAはSeriesCollection(2) ではなくSeriesCollection(5)にセットする必要があるのでは?
 
最初から6列ではなく8列のデータ範囲にしておいて、
・SeriesCollection(5),SeriesCollection(6)を二軸に設定
・最小値、最大値を一軸と同一のものに合わせる
・二軸の縦軸のラベルはたぶん不要でしょうから、非表示にする
といった対応が必要だと思います。
 
マクロ記録などをとってトライしてみてください。

回答
投稿日時: 22/08/14 16:22:48
投稿者: simple

質問の趣旨を取り違えていたかもしれません。
 
.ChartType = xlLine
が実行された瞬間に、二軸に変更されていますね。
これは、始値 - 高値 - 安値 - 終値グラフの既定の様式に不一致の.ChartTypeが
指定されたために、Excelがそのように判断しているものと想像されます。
これは仕様でしょうから動かしがたいと思います。
(つまり、.ChartType = xlStockOHLCとした以上、特定の4系列はPrimaryというのが
  彼らの採っている前提ということでしょう。)
 
・始値 - 高値 - 安値 - 終値はPrimary
・その他のグラフはSecondary 
という枠組みに沿った使用では、なにか大きな支障があるんでしょうか?
なければそのようにされるのがよろしいかと思います。

投稿日時: 22/08/14 18:06:06
投稿者: andoandoando

simple様
 
ご回答ありがとうございます。
できました。ありがとうございます。
経過記載しておきます。
 
おっしゃるように、株価チャートは他の棒グラフなどとは違うようで、それだけで1まとまりとなっているようです。
2軸に移動平均を置くこと自体はできるのですが、その他のものも2軸に置きたい(数字が違うので表示がずれてしまう)ので、1軸側におきたいのです。
 
株価の4本値チャートに移動平均を1軸に表示させ、MACDを2軸に表示させることができます。
そのテンプレートを用いて表示させると意図した状態になります。
しかし、VBAを動かすとその体裁がくずれてしまうため、(毎回テンプレート読ませると遅い気がすることもあり)、直接軸設定したいという状態です。
 
このやり方は株価の4本値でグラフを書く
移動平均の値をコピーしてグラフに貼り付ける
株価チャートと一体になってしまうので、棒の一部を選ぶと移動平均のデータが選べるので、選んで2軸へ
線グラフにしてから1軸に戻す
のようなやりかたです。
 
これをマクロ記録してみました。
おっしゃるように追加した移動平均は
ActiveChart.FullSeriesCollection(6).AxisGroup = 1
と(6)となっています。
MACDは(5)です。
 
これらを踏まえて記載したところ、欲しい形のチャートになりました。
 
 Worksheets("検証").ChartObjects("グラフ 1").Chart.SeriesCollection(5).AxisGroup = 2
 Worksheets("検証").ChartObjects("グラフ 1").Chart.SeriesCollection(6).AxisGroup = 1
 
を記載いたしました。
大変ありがとうございました。