Excel:在XY图表中为数据点添加标签

时间:2014-09-30 09:15:37

标签: excel excel-vba charts vba

我希望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

它到目前为止有效。但只有当集合没有名称时:

enter image description here

当我命名集合时,宏会返回错误:

enter image description here

有谁知道如何使用Mircosoft提供的代码并且仍然可以命名数据集?

4 个答案:

答案 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'
};

firstXfirstY变量是X和Y值。

要为每个点添加标签,我向text添加了标签,并将模式更改为marker+text,而不只是marker

创建图表后,可以通过在名为Funfun的Excel加载项中传递URL将其加载到Excel中。

以下是它的样子:

final

披露:我是funfun的开发者

答案 2 :(得分:2)

Excel 2013引入了使用单元格数据标记图表系列的功能,经过多年的用户请求。选择系列,然后添加数据标签。选择数据标签并格式化。在任务窗格中的“标签选项”下,查找“标签包含”,选择“从单元格值”选项,然后选择包含标签文本的范围。

enter image description here

甚至在此之前,您可以使用名为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

enter image description here