Martin有一个工作表,其中包含50行数据,每行描述一个对象。列A包含对象的名称,列B包含其X坐标,列C包含其Y坐标。当他创建X-Y散点图时(B列与C列相对应),结果如所需要,是一个图形,显示了一系列点,这些点表示了对象的位置。但是,Martin似乎无法用数据点的单独名称(从A列中)来标记数据点。当他尝试标记数据点时,唯一可用的选项是用其X值,Y值或序列名称标记每个点。马丁想知道是否有一种方法可以轻松地使用列A来标记绘制的数据点。

这可以手动完成,但充其量是乏味的。对于50行,这将很快变得残酷,因此最好看一下面向宏的方法。一种想法是使用类似于以下内容的宏,该宏逐步遍历X-Y图表中的数据点并从A列读取标签值。

Sub DataLabelsFromRange()

Dim Cht As Chart     Dim i, ptcnt As Integer

Set Cht = ActiveSheet.ChartObjects(1).Chart     On Error Resume Next     Cht.SeriesCollection(1).ApplyDataLabels _       Type:=xlDataLabelsShowValue, _       AutoText:=True, _       LegendKey:=False

ptcnt = Cht.SeriesCollection(1).Points.Count     For i = 1 To ptcnt         Cht.SeriesCollection(1).Points(i).DataLabel.Text = _           ActiveSheet.Cells(i + 1, 1).Value     Next i End Sub

该宏假定工作表的第一行包含标题信息,并且实际数据从第2行开始。如果数据确实从第1行开始,则将“ i + 1”更改为简单的“ i”。 (实际上,这种宏方法是对约翰·沃肯巴赫(John Walkenbach)的出色著作_Excel 2003 Power Programming with VBA的第570-571页中的宏的变形。

一种非常独特的非宏方法是使用Excel的自定义格式。

您需要做的就是设置一堆自定义格式,这些格式仅包含要显示的文本。例如,如果在单元格A3至C3中具有值Age,15和23,则可以设置单元格B3或C3的格式,以显示单词“ Age”,即使该值分别保持为15或23。只需为单元格的“自定义”格式输入“年龄”(包括引号)即可。然后格式化图表以显示X或Y值的标签。

执行此操作时,图表的X轴值可能会全部更改为任何格式名称(即Age)。但是,将X轴的格式设置为数字(在这种情况下,小数点后没有数字)而不是常规的格式后,图表应正确显示。

显然,在您设置并为数据系列中的每个值应用一堆自定义格式时,实施此方法仍会花费一些时间。如果您不想弄乱编写和测试自己的宏或创建一堆自定义格式,可以随时使用别人编写的加载项。微软MVP Rob Bovey为Excel创建了一个出色的(免费)加载项,其中包括X-Y标签功能。可以在以下地址下载:

注意:

http://www.appspro.com/Utilities/ChartLabeler.htm

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3503)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

链接:/ excelribbon-Labeling_X-Y_Scatter_Plots [标签X-Y散点图]。