我有数据显示人们是否说他们在调查中有问题,例如
Shop Problem Month
Argos Yes January
Argos Yes February
Argos Yes January
Argos No January
Argos No January
Argos Yes February
Argos No February
Argos Yes January
Argos No February
Argos Yes February
Argos No February
Argos No January
Argos Yes February
Argos No April
Argos No April
Argos No April
B&Q No January
B&Q No January
B&Q Yes January
根据这些数据,我有一个计算每月问题百分比的公式,因此1月份有6次调查,其中3次表示他们遇到问题所以是50%。
此数据显示在条形图上,因此1月份显示50%,2月份显示57%,4月份显示0%。虽然我可以证明4月份使用图表上的数据标签存在0%的问题,但如果没有数据,公式将返回“ - ”,例如因为没有任何数据,它将返回“ - ”,但在图表上显示为0%。
那么有没有一种方法可以包括所有月份(1月,2月,3月和4月)并显示有几个月有0%的问题,但其他人没有数据 - 最好是通过显示数据标签为没有数据的月份的“ - ”?
值得注意的是,图表一次只显示一个商店的数据,并且用户使用下拉框选择它所依赖的商店 - 因此,作为一个例子,虽然没有数据3月份的Argos,3月可能有B& Q的数据,但4月没有B& Q的数据。
答案 0 :(得分:1)
我不确定旧版本的Excel,但Excel 2013有一个数据标签选项"来自Cell"这基本上做你想要的
修改强>
所以我看了Excel 2010,我认为它没有这个功能。如果您想避免使用VBA,可以选择以下几种方法:
2。)你也可以通过定义像这样的自定义格式来进行格式化技巧......
#0 ##。 "否定显示此&#34 ;; "零表示此&#34 ;; "所有文字都显示了这个"
这个问题是图表使用的系列值需要数值或空格,因此文本格式不会执行,而您将以零格式离开,因为文本转换为图表数据为零。
3。)然后,当然,你也可以选择用VBA强制它,就像这样......
Private Sub Worksheet_Calculate()
'Loops through each chart object
For Each obj In ActiveSheet.ChartObjects
'This syntax can also be used to grab a specific chart without the loop
Set sc = ActiveSheet.ChartObjects(obj.Name).Chart.SeriesCollection
'Loops through each series per chart
For i = 1 To sc.Count
SetLabelsToTrueSourceValue sc.Item(i)
Next i
Next
End Sub
Private Sub SetLabelsToTrueSourceValue(ByRef sr As Series)
'Get source data range addresses from formula
Dim SourceData() As String
A = Split(sr.Formula, ",")
'Get actual non-formatted values from value range
Dim Values() As Variant
Values = Range(A(2)).Value2
i = 1
On Error Resume Next 'Avoid fatality if no data label present
For Each pt In sr.Points
pt.DataLabel.Text = Values(i, 1)
i = i + 1
Next
End Sub
答案 1 :(得分:0)
我已经提供了一些VBA代码来为您完成此任务。代码基于我在此处显示的表单,因此您可能需要根据自己的数据集进行调整。
代码如下。请密切关注注释,因为您需要编辑以适合您的特定工作簿。您可以创建一个按钮(如图所示)并将宏指定给按钮并在将图表发送到分发之前运行它,以便显示正确的数据标签。
Sub UpdateLabels()
Dim cht As ChartObject, srs As Series, pts As Point
Dim wsC As Worksheet, wsD As Worksheet
Set wsC = Sheets("sheet-chart-is-on") ' change to the correct sheet name for you
Set wsD = Sheets("sheet-data-is-on") ' change to correct sheet name for you
Set cht = wsC.ChartObjects("Chart 2") 'change to the correct chart name for you
With cht
For Each srs In .Chart.SeriesCollection
Dim i As Long
i = 1
For Each pts In srs.Points
Dim s As String
s = wsD.Cells(i, 8).Value ' based on data range being from H1:H7, if you need to adjust the column and or row you can do so in the Cells arguments
If s <> "-" Then s = Format(s, "#0%") 'formats as pct, you can change this by changing what is in ""
srs.Points(i).DataLabel.Text = s
i = i + 1
Next
Next
End With
End Sub
所有这一切,将代码放在VBE中的新模块中。 Here's a small tutorial (plus more) on how to do that.