数字格式以摆脱积分并仅显示十进制

时间:2016-11-02 16:14:34

标签: excel excel-2010

我正在做一个花哨的图表,我想在条形图上方显示计划的百分比,但当然因为它是%,所以数字比它应该低得多。

我想到了一个可能很酷的黑客,我将结果与计划的百分比结合起来,这会使结果高于结果。

虽然失败但我需要使用自定义数字格式,以便我可以省略小数点前的内容(积分),然后将其余部分显示为百分比。

例如,如果:

a) Plan = 500
b) Results = 600
c) % of Plan = 120%
d) Results + (%oFPlan * 0.001) = 600.0120

我希望Excel将d)显示为120%并忽略600.0

它应该看起来像这样:

enter image description here

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是分配来自不同范围的数据标签,因此,假设您有一个这样的图表,并且您希望数据标签分别为120%和150%,而不是600和500。

enter image description here

现在,在旧版本的Excel中,“图表”对话框中有一个选项允许您重新分配数据标签公式,但它在Excel 2010中不再存在,或者我无法找到它(我在大多数情况下使用VBA)。

即使这样做,你仍然坚持使用其中一种(600或120%,但不是两者)。要显示两者(600以上,120%以上),您需要两个系列的数据。

在图表中添加重复的系列:

enter image description here

选择该系列并执行重叠100%:

enter image description here

格式化新系列

对于这个例子,我使用" No Fill" (或将系列顺序设置为" 1"将置于现有系列之后;取决于图表的其余部分,可能会也可能不会)。有一些关于" No Fill"系列的怪癖。所以我通常喜欢把它们变成白色并推进系列指数= 1,这样它们就会出现在"背后"其他系列。

enter image description here

立即选择数据标签,然后按如下方式运行VBA程序。

请注意,上述某些步骤可以介绍给VBA,但实现方式在很大程度上取决于您的图表和图表。工作表结构。

Sub Data_Labels()
'Data_Labels Macro
Dim ws As Worksheet
Dim cht As Chart
Dim srs As Series
Dim dl As DataLabels
Dim rng As Range
Dim pt As Point
Dim p As Integer
Set ws = ActiveSheet

'Ensure the user selects some DataLabels
If TypeName(Selection) <> "DataLabels" Then
    MsgBox "Please select data labels to overwrite", vbInformation
    GoTo EarlyExit
End If

'Get a handle on the chart & data labels objects
Set dl = Selection
Set cht = Selection.Parent.Parent.Parent

'Prompt the user for new labels
Set rng = Application.InputBox( _
            "Please select the values to use for the data labels", _
            "Overwrite data labels", _
            Type:=8)

'Sanity check:
Do While rng.Cells.Count <> dl.Count
    Set rng = Application.InputBox( _
        "The number of cells in your selection does not match the number of data labels, please try again.", _
        "Overwrite data labels", _
        rng.Address, _
        Type:=8)

Loop

Set srs = dl.Parent
'## Iterate the points in this series
For p = 1 To srs.Points.Count
    Set pt = srs.Points(p)
    '##Overwrites the text with formula reference to the specified cell
    pt.DataLabel.Text = "='" & ws.Name & "'!" & rng.Cells(p).Address(ReferenceStyle:=xlR1C1)
Next

EarlyExit:

End Sub

结果

你应该得到一个类似的图表(你可以删除图例,或每个系列的个别LegendEntry):

enter image description here

由于此图表的此系列数据标签现在包含对单元格的公式引用,因此 的单元格可以包含达到120%的公式或不管。

enter image description here

<强>更新

我留下原始答案,因为它非常通用,但这也可以使用&#34; Stacked Column&#34;图表。但是,我还没有尝试使用更复杂的图表进行测试,并且从内存中,使用堆积列以及数据中的其他图表类型或系列存在一些挑战,这可能不适用于您的目的。 / p>

使用导致%值的整数表示的公式构建堆积柱形图,例如&#34; 120&#34;而不是&#34; 1.2&#34;或&#34; 120%&#34;。将系列格式设置为不可见/无填充,并将数据标签的位置调整为Inside Base:

enter image description here

然后通过自定义格式将数字格式应用于单元格General""\%""

然后确保系列&#39;数据标签是&#34;链接到来源&#34;:

enter image description here

结果如下:

enter image description here

答案 1 :(得分:0)

对于维护电子表格的人来说,非常会让人感到困惑。

作为替代方案,请考虑引入另一行或列,其中该区域中的单元格具有公式

=Mod(<range>, 1)

<range>对应于您想要格式化的单元格。这将只提取小数部分,您可以将其格式化为百分比。