none
Excel2010 VBA グラフで1軸と2軸の目盛を同期させたい RRS feed

  • 質問

  • OKWave_ID Zi-coさんのプログラム参考に下記のようなローソク足と移動平均をグラフにしまいた。
     1軸と2軸の目盛の表示がが少しづつ違います、1軸と2軸の目盛表示を同じにしたいです。

    Sub ローソク足()
      Dim r As Range
      Dim s As String

        With ActiveSheet
                   .Range("J1:K1").Value = [{"x範囲数","x移動"}]
                    'ScrollBarを作成し、セルにリンクさせます。
                   For Each r In .Range("J3:K3")
                      With .ScrollBars.Add(r.Left, r.Top, r.Width, r.Height)
                            .Value = 1
                            .Min = 1
                            .Max = 1074
                            .SmallChange = 1
                            .LargeChange = 10
                            .LinkedCell = r.Offset(-1).Address
                          End With
                       Next
                   .Range("J2").Value = 63
    '--------------------[名前定義]を作成し、リンクセルによって可変する範囲を設定します------------------------------------
                   .Names.Add "時間", "=OFFSET($B$10,$k$2,0,$J$2,)"
                   .Names.Add "始値", "=OFFSET($B$10,$k$2,1,$J$2,)"
                   .Names.Add "高値", "=OFFSET($B$10,$k$2,2,$J$2,)"
                   .Names.Add "安値", "=OFFSET($B$10,$k$2,3,$J$2,)"
                   .Names.Add "終値", "=OFFSET($B$10,$k$2,4,$J$2,)"
                   .Names.Add "ma", "=OFFSET($B$10,$K$2,5,$J$2,)"
                   .Names.Add "mb", "=OFFSET($B$10,$K$2,6,$J$2,)"
                   .Names.Add "mc", "=OFFSET($B$10,$K$2,7,$J$2,)"
                   s = "'" & .Name & "'!"
    '------------------------グラフ作成--------------------------------------------------------------------------------------------
                   With .ChartObjects.Add(.Range("L2").Left, 40, 500, 300).Chart
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$C$10," & s & "時間," & s & "始値,1)"
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$D$10," & s & "時間," & s & "高値,2)"
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$E$10," & s & "時間," & s & "安値,3)"
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$F$10," & s & "時間," & s & "終値,4)"
                         .ChartType = xlStockOHLC   'ローソク足
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$G$10," & s & "時間," & s & "ma,5)"
                         .SeriesCollection(5).ChartType = xlLine   '折れ線
                         .SeriesCollection(5).AxisGroup = xlSecondary '二軸
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$H$10," & s & "時間," & s & "mb,6)"
                         .SeriesCollection(6).ChartType = xlLine  '折れ線
                         .SeriesCollection(6).AxisGroup = xlSecondary '二軸
                         .SeriesCollection.NewSeries.Formula = "=SERIES(" & s & "$I$10," & s & "時間," & s & "mc,7)"
                         .SeriesCollection(7).ChartType = xlLine  '折れ線
                         .SeriesCollection(7).AxisGroup = xlSecondary '二軸
                       End With
                End With
     End Sub


    2013年1月14日 17:25

回答

  • 以下、ご参考までに連携します。

                         ' 目盛最大値の同期
                         .Axes(xlValue, xlSecondary).MaximumScale = .Axes(xlValue, xlPrimary).MaximumScale
                         ' 目盛最小値の同期
                         .Axes(xlValue, xlSecondary).MinimumScale = .Axes(xlValue, xlPrimary).MinimumScale
                         ' 目盛間隔の同期
                         .Axes(xlValue, xlSecondary).MajorUnit = .Axes(xlValue, xlPrimary).MajorUnit

    こちらのように、1軸の値を2軸に設定してはいかがでしょうか?

    「With .ChartObjects.Add(.Range("L2").Left, 40, 500, 300).Chart」←このWith句の中に、上記のコードを記載して動作確認してみました。

    ローソク足

    また、「OKWave_ID Zi-coさんのプログラム」という記載がありますが、可能であれば、このような外部サイト参照は、URLなどのリンクを記載しておくと良いと思います。

    • 編集済み kyk_nk 2013年1月30日 5:28 修正
    • 回答としてマーク DavidMicro 2013年1月31日 6:36
    2013年1月30日 4:44

すべての返信

  • 以下、ご参考までに連携します。

                         ' 目盛最大値の同期
                         .Axes(xlValue, xlSecondary).MaximumScale = .Axes(xlValue, xlPrimary).MaximumScale
                         ' 目盛最小値の同期
                         .Axes(xlValue, xlSecondary).MinimumScale = .Axes(xlValue, xlPrimary).MinimumScale
                         ' 目盛間隔の同期
                         .Axes(xlValue, xlSecondary).MajorUnit = .Axes(xlValue, xlPrimary).MajorUnit

    こちらのように、1軸の値を2軸に設定してはいかがでしょうか?

    「With .ChartObjects.Add(.Range("L2").Left, 40, 500, 300).Chart」←このWith句の中に、上記のコードを記載して動作確認してみました。

    ローソク足

    また、「OKWave_ID Zi-coさんのプログラム」という記載がありますが、可能であれば、このような外部サイト参照は、URLなどのリンクを記載しておくと良いと思います。

    • 編集済み kyk_nk 2013年1月30日 5:28 修正
    • 回答としてマーク DavidMicro 2013年1月31日 6:36
    2013年1月30日 4:44
  • Kyk_nkさん、ありがとうございます

    「OKWave_ID Zi-co」さんのURL下記に記載します。

    お客様のアカウントが確認されるまでは、本文に画像やリンクを含むことはできませんと表示されますので、参考までに(http://) (okwave.jp/qa/q5084826)(.html)と記載します。

    2013年1月31日 7:12
  • DavidMicroさん

    URLの記載、ありがとうございました。

    アカウントが確認され、リンクを含めるようになりましたら、以下のメニューアイコンをクリックすることで、お手軽にリンクを張る方法がオススメです。

    是非、ご活用ください!(既知の情報でしたら、お節介にも失礼いたしました!)

    • 編集済み kyk_nk 2013年1月31日 8:41 修正
    2013年1月31日 8:19