2012-04-11 47 views
0

我需要將excel圖表中的X標籤精確到最近的50位。圖表是在VBA中創建的,數據系列在工作表中,因此我將很高興在任一方面使用解決方案。我寫了下面的函數,四捨五入爲最接近50:如何將x-tick標籤四捨五入爲最接近的50

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

我已經把它應用到圖表的最小和最大X極限,它適用於他們,但我不能工作了如何申請這對於所有的中間標籤。我想在繪圖之前將它應用於所有數據,但這會改變我不想做的情節。由於四捨五入,我希望蜱標籤略有偏差。

你可以用格式化字符串來做到這一點嗎?或者其他方式?

感謝

+2

是否將您的主要滴答時間間隔和X軸的次要滴答間隔更改爲50個工作? – Sam 2012-04-11 17:09:51

+0

哈哈 - 可能。我明天再查。我正在計算滴答間隔時間,以便在我需要四捨五入之前給出特定數量的間隔,因此我忘記了可以將其設置爲常量。 – Dan 2012-04-11 18:14:58

+0

這並不是那麼簡單(幾乎,但不完全),因爲數字的範圍很大,50的間隔太小了。所以相反,我在當前的時間間隔上使用了上面的RoundTo50代碼。我將發佈代碼作爲答案,以便我可以關閉此問題。感謝這個想法,但它讓我有90%的方式! – Dan 2012-04-12 06:39:51

回答

0

所以答案如下(感謝薩姆病房把我推在正確的方向上的評論):

用我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稍微偏移與副軸的刻度線。使用格式化字符串時,它們將完美對齊(因爲它們會在錯誤的位置稍微有些偏差,但我更喜歡這樣)。

+0

沒問題。很高興我能幫上忙。 – Sam 2012-04-12 18:13:50

相關問題