如何将x-ticklabels四舍五入到最近的50

时间:2012-04-11 17:03:35

标签: excel charts excel-vba vba

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

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

我已经将它应用到图表的最小和最大x限制,它适用于它们,但我无法弄清楚如何将它应用于两者之间的所有标记。我想在绘图之前将它应用于所有数据,但这会改变我不想做的情节。由于四舍五入,我更希望滴答标签略微错位。

你能用格式化字符串吗?或者其他任何方式?

由于

1 个答案:

答案 0 :(得分:0)

所以答案如下(感谢Sam Ward的评论让我朝着正确的方向前进):

使用我的RoundTo50()函数将最小和最大限制舍入到最接近的50.计算合理数量的网格线的间隔,在我的情况下为12.将此间隔舍入到最接近的50。 / p>

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的网格线与辅助轴的刻度线稍微偏移。使用格式化字符串,它们将完全对齐(因为它们会略微位于错误的位置,但我更喜欢这样)。