二次軸の原点を一次軸に合わせる


2

主軸と正確に一致するように副軸を調整することに興味があります。

より明確にするために、両方の原点が同じ場所の0に並んでいて、それぞれの相対的な縮尺が保たれている必要があります。

これをVBAソリューションにするか、手作業を最小限に抑えることをお勧めします。

chart


データフィールドと現在のグラフィックを含む画像を表示してください。

私は十分な評判を持っていないという事実のために、スタックオーバーフローは私がグラフィックを公開することを可能にしませんでした。

しかし、あなたは直接データを置くか、または少なくともURLを置くことができます

良い電話、元の記事にリンクを追加

回答:


2

私はこのリンクを使いました: http://peltiertech.com/Excel/Charts/AlignXon2Ys.html

' Helper Macros
Sub AlignY_PrimaryMinimum()
  AlignY 1
End Sub

Sub AlignY_PrimaryMaximum()
  AlignY 2
End Sub

Sub AlignY_SecondaryMinimum()
  AlignY 3
End Sub

Sub AlignY_SecondaryMaximum()
  AlignY 4
End Sub

' The Main Event
Sub AlignY(FreeParam As Integer)
  '' FreeParam: AXIS ALLOWED TO VARY
  '' 1: Y1 (PRI) MIN
  '' 2: Y1 (PRI) MAX
  '' 3: Y2 (SEC) MIN
  '' 4: Y2 (SEC) MAX

  Dim Y1min As Double
  Dim Y1max As Double
  Dim Y2min As Double
  Dim Y2max As Double

  With ActiveChart
    With .Axes(2, 1)
      Y1min = .MinimumScale
      Y1max = .MaximumScale
      .MinimumScaleIsAuto = False
      .MaximumScaleIsAuto = False
    End With
    With .Axes(2, 2)
      Y2min = .MinimumScale
      Y2max = .MaximumScale
      .MinimumScaleIsAuto = False
      .MaximumScaleIsAuto = False
    End With
    Select Case FreeParam
      Case 1
        If Y2max <> 0 Then _
          .Axes(2, 1).MinimumScale = Y2min * Y1max / Y2max
      Case 2
        If Y2min <> 0 Then _
          .Axes(2, 1).MaximumScale = Y1min * Y2max / Y2min
      Case 3
        If Y1max <> 0 Then _
          .Axes(2, 2).MinimumScale = Y1min * Y2max / Y1max
      Case 4
        If Y1min <> 0 Then _
          .Axes(2, 2).MaximumScale = Y2min * Y1max / Y1min
    End Select
  End With
End Sub

0

これでうまくいくでしょうか。

Sub RescaleSecondaryAxis()

    Dim PriMax, PriMin
    Dim SecMax, SecMin

    ActiveSheet.ChartObjects("myChart").Activate
    ActiveChart.Axes(xlValue, xlPrimary).Select

    PriMax = ActiveChart.Axes(xlValue, xlPrimary).MaximumScale
    PriMin = ActiveChart.Axes(xlValue, xlPrimary).MinimumScale

    SecMax = PriMax 
    SecMin = PriMin 

    ActiveChart.Axes(xlValue, xlSecondary).MaximumScale = SecMax
    ActiveChart.Axes(xlValue, xlSecondary).MinimumScale = SecMin

End Sub

御返答いただき有難うございます!私は実際にここに答えを得ました&lt; peltiertech.com/Excel/Charts/AlignXon2Ys.html &gt;
liber

これは、一次軸と二次軸の両方にまったく同じ縮尺を与えます。これはおそらくOPが望んでいたものではありません。 2つの異なるスケールのゼロを揃えるには、スケールがそれぞれ最小値と最大値の比率が同じになるように少し代数を計算する必要があります。
Jon Peltier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.