【问题标题】:How to round off x-ticklabels to the nearest 50如何将 x-ticklabels 舍入到最接近的 50
【发布时间】:2012-04-11 17:03:35
【问题描述】:

我需要将 Excel 图表中的 X-ticklabels 舍入到最接近的 50。图表是在 VBA 中创建的,数据系列在工作表中,所以我很乐意在其中使用任何一个解决方案。我编写了以下四舍五入到最接近 50 的函数:

  Function RoundTo50(number As Double) As Double
      RoundTo50 = WorksheetFunction.Round(number * 2, -2) / 2
  End Function

我已将它应用于图表的最小和最大 x 限制并且它适用于它们,但我无法弄清楚如何将它应用于其间的所有刻度标签。我想在绘图之前将其应用于所有数据,但这会改变我不想做的绘图。由于四舍五入,我希望刻度标签稍微未对齐。

你能用格式化字符串做到这一点吗?还是其他方式?

谢谢

【问题讨论】:

  • 将 X 轴的主要刻度间隔和次要刻度间隔更改为 50 是否有效?
  • 哈哈 - 可能。我明天检查一下。我正在计算滴答间隔,以便在我需要四舍五入之前给我一个特定数量的间隔,所以我忘记了我可以将它设置为一个常数。
  • 这不是那么简单(几乎,但不完全),因为数字的范围很大,50 的间隔太小了。因此,我在当前间隔上使用了上面的 RoundTo50 代码。我将发布代码作为答案,以便我可以关闭这个问题。不过谢谢你的想法,它让我成功了 90%!

标签: charts excel vba


【解决方案1】:

所以答案如下(感谢 Sam Ward 的评论将我推向了正确的方向):

使用我的 RoundTo50() 函数将最小和最大限制四舍五入到最接近的 50。计算合理数量的网格线的间隔应该是多少,在我的例子中是 12。将此间隔四舍五入到最接近的 50。

Function RoundTo50(number As Double) As Double
    RoundTo50 = WorksheetFunction.Round(number * 2, -2) / 2
End Function

With Sheets("Report").ChartObjects.Add(...)
    .Chart.Axes(xlCategory).MinimumScale = RoundTo50(Sheets(sheetName).Range("M4"))
    .Chart.Axes(xlCategory).MaximumScale = RoundTo50(Sheets(sheetName).Range("M124"))
    .Chart.Axes(xlCategory).MajorUnit = RoundTo50((.Chart.Axes(xlCategory).MaximumScale - .Chart.Axes(xlCategory).MinimumScale) / 12)
    .Chart.Axes(xlCategory).MinorUnit = .Chart.Axes(xlCategory).MajorUnit / 3

我仍然对能够使用格式化字符串执行此操作非常感兴趣,因为我有一个以百分比表示的辅助轴,并且从舍入到 50 的网格线与辅助轴的刻度线略有偏移。使用格式化字符串,它们将完全对齐(因为它们会稍微放在错误的位置,但我更喜欢那样)。

【讨论】:

  • 没问题。很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多