有没有办法设置图表上的比例,以便主要最大和最小 Y 轴值也等于次要 Y 轴上的相同值?
基本上,我有许多不同的股票在看(历史日志值),每只股票都有自己的价格折线图,然后我添加了一个显示 3 条水平线的辅助系列 - 平均价格,以及高于和低于平均价格的一个标准差,这样我就可以看到股票波动的通常价格范围(这个系列我有一个散点图)。我的问题是 Excel 似乎对每个 Y 轴使用了不同的自动缩放比例(我尝试在我的辅助系列中包含相同的最小值和最大值,但比例有时仍然不同)。
理想情况下,由于我正在查看相当多不同的股票,因此我希望通过添加几列来实现自动化,在这些列中,我可以将最大和最小 Y 值设置为等于每只股票的最大或最小价格(对于主轴和次轴)。我尝试查看以下网站,看看是否可以创建一个宏(http://peltiertech.com/Excel/Charts/AxisScaleLinkToSheet.html),但我的宏编写技能相当不足,并且运气不佳。
我意识到这个请求可能只能通过 VBA 实现,所以长话短说,有人知道如何设置一个宏,使我选择的图表能够使用我提供的参数自动调整大小吗?(假设 A 列显示日期,B 列显示价格,右边的部分(比如单元格 D1:F4)将指定 X 和 Y 的最小值和最大值,也许还有宏可以读取的刻度大小?(我知道如何创建一个空白宏,然后跳转到宏本身,但这就是我开始有点迷失的地方,不知道在哪里实际粘贴代码)。
答案1
此代码片段应为您的请求提供基本信息。在您的工作簿模块中,它应独立存在,或者您可以从此处将其扩展到其他工作表或修改图表的任何部分。前几行用于错误捕获 - 以防您未选择图表。其他所有内容均已格式化。只需将参考范围指向您想要用于刻度的单元格即可。
子自定义轴()
If ActiveChart Is Nothing Then ' Error trap to ensure a chart is selected MsgBox "Please: Select a chart and try again.", vbExclamation Else ActiveChart.Axes(xlValue).MinimumScale = Range("A2") 'Set min scale to cell A2 ActiveChart.Axes(xlValue).MaximumScale = Range("A3") 'Set max scale to cell A3 ActiveChart.Axes(xlValue).MajorUnit = Range("A4") 'Set major tick to cell A4 ActiveChart.Axes(xlValue).MinorUnit = Range("A5") 'Set minor tick to cell A5 End If
子目录结束
答案2
您可以通过向图表添加一些数据,使其自动化并独立于 VBA。
例如,在单元格 F2 中插入一个公式,计算两个轴上所有 Y 值的最小值,在 F3 中插入一个公式,计算相应的最大值。如下所示:
下面的第一张图表仅显示股票数据,第二张图表在次轴上显示股票数据,在主轴上显示参考线(因此参考线出现在股票数据后面)。
在第三张图表中,我将 F 列的最小/最大数据添加到主轴,并将第四列的最小/最大数据添加到次轴。
最后,在第五张图表中,我已将最小/最大系列格式化为不带线条或标记,因此它们被隐藏了。如有必要,您可以将它们从图例中删除:单击图例一次,然后单击要删除的图例条目一次,然后单击“删除”。
无论数据如何变化,F 列中的最小值/最大值计算都会更新,图表也会更新。