我希望Excel图表中的数据点旁边有标签。为此目的,Microsoft提供了一个VBA代码:
http://support2.microsoft.com/kb/914813/en-us
Sub AttachLabelsToPoints()
'Dimension variables.
Dim Counter As Integer, ChartName As String, xVals As String
' Disable screen updating while the subroutine is run.
Application.ScreenUpdating = False
'Store the formula for the first series in "xVals".
xVals = ActiveChart.SeriesCollection(1).Formula
'Extract the range for the data from xVals.
xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _
Mid(Left(xVals, InStr(xVals, "!") - 1), 9)))
xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1)
Do While Left(xVals, 1) = ","
xVals = Mid(xVals, 2)
Loop
'Attach a label to each data point in the chart.
For Counter = 1 To Range(xVals).Cells.Count
ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _
True
ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _
Range(xVals).Cells(Counter, 1).Offset(0, -1).Value
Next Counter
End Sub
它到目前为止有效。但只有当集合没有名称时:
当我命名集合时,宏会返回错误:
有谁知道如何使用Mircosoft提供的代码并且仍然可以命名数据集?
答案 0 :(得分:2)
我遇到了同样的问题。您需要做的就是更换硬编码的	 9'使用' InStr(xVals,",")'并且它将在第一个逗号之前的字段中接受任何长度的SERIES名称。
答案 1 :(得分:2)
已经有一些很好的答案,比如ZAT的答案,解释了如何使用VBA语言为原生Excel中的数据点添加标签。
但如果您对VBA一无所知,可能很难理解。对于像这样的复杂图表,我更喜欢使用Javascript,我认为它比VBA更“可读”。如果你想制作一个动态的交互式图表,javascript会附带很多强大的库。
以下是我为您编写的工作代码plotly.js(该文档非常适合初学者):
https://www.funfun.io/1/#/edit/5a60bbe7404f66229bda3e39
因此,为了构建此图表,我将我的数据放入嵌入电子表格中,然后由于Json文件,我可以在我的javascript代码中使用它。
我可以像这样创建一个散点图:
var trace1 = {
x: firstX,
y: firstY,
text: firstLabel,
mode: 'markers+text',
textposition:'top right'
};
firstX
和firstY
变量是X和Y值。
要为每个点添加标签,我向text
添加了标签,并将模式更改为marker+text
,而不只是marker
。
创建图表后,可以通过在名为Funfun的Excel加载项中传递URL将其加载到Excel中。
以下是它的样子:
披露:我是funfun的开发者
答案 2 :(得分:2)
Excel 2013引入了使用单元格数据标记图表系列的功能,经过多年的用户请求。选择系列,然后添加数据标签。选择数据标签并格式化。在任务窗格中的“标签选项”下,查找“标签包含”,选择“从单元格值”选项,然后选择包含标签文本的范围。
甚至在此之前,您可以使用名为XY Chart Labeler的免费插件(适用于所有支持数据标签的图表,而不仅仅是XY图表),您可以从Applications Professionals下载。它由前微软Excel MVP的Rob Bovey撰写。
答案 3 :(得分:1)
生成图表后尝试此操作(假设同一张表中的图表): (根据您的需要修改)
Option Explicit
Sub RenameChartDataLabel()
Dim rngDLabel As Range
Dim iii as integer, pp as integer, dlcount as integer
Set rngDLabel = ActiveSheet.Range("A2:A6") 'change range for datalabels text
ActiveSheet.ChartObjects("Chart 2").Activate 'change chart name
dlcount = ActiveChart.SeriesCollection(1).DataLabels.Count
iii = 1
pp = 1
For iii = dlcount To 1 Step -1
ActiveChart.SeriesCollection(1).DataLabels(iii).Select
Selection.Text = rngDLabel(pp).Value
Selection.Font.Bold = True
Selection.Position = xlLabelPositionAbove
pp = pp + 1
Next
Set rngDLabel = Nothing
End Sub