答案1
在我的另一个回答中,我没有考虑到最后一个点的移动(即添加的数据点)。调整数据以允许单个移动标签并不是什么大问题。
我只显示了一个数据系列,但只要您掌握诀窍,就可以根据需要轻松显示多个数据系列。在下面的数据集中,我有一个日期列和两列具有相同标题“值”的列。第一个值列的值一直到日期范围的中间。第二列有一个公式,仅显示最后一个值。这是单元格 C2 中的公式:
=IF(AND(ISNUMBER(B2),LEN(B3)=0),B2,NA())
将此公式复制到该列下方。
现在制作所有数据的图表。第一个值系列是蓝色圆圈和线条,第二个只是最后一个蓝点上的橙色圆圈。我为橙色系列添加了标签,而不是蓝色系列。
第二张图表只是显示它已被清理:我已经格式化了第二个值系列,因此它不使用标记和线条,并且我已经删除了图例。
在下图中,我所做的只是添加几个数据点。无需我做任何进一步的努力,标签就移动到了新的最后一个点。
答案2
如果选择整个系列,Excel 将为系列中的每个点添加标签。
只选择您想要添加标签的单个点:单击一次以选择系列,然后再次单击以选择一个点。现在,当您使用右键菜单或加号图标添加数据标签时,它将仅在您选择的一个点上添加标签。
对于只向最后一个点添加标签并且不会在图表中留下一堆“”标签的 VBA 方法,以下是我的教程中的一个简单步骤为 Excel 2007 标记最后一个点。它用系列名称专门标记活动图表中每个系列的最后一个点。
Sub LastPointLabel()
Dim mySrs As Series
Dim iPts As Long
Dim vYVals As Variant
Dim vXVals As Variant
If ActiveChart Is Nothing Then
MsgBox "Select a chart and try again.", vbExclamation
Else
Application.ScreenUpdating = False
For Each mySrs In ActiveChart.SeriesCollection
With mySrs
vYVals = .Values
vXVals = .XValues
' clear existing labels
.HasDataLabels = False
For iPts = .Points.Count To 1 Step -1
If Not IsEmpty(vYVals(iPts)) And Not IsError(vYVals(iPts)) _
And Not IsEmpty(vXVals(iPts)) And Not IsError(vXVals(iPts)) Then
' add label
mySrs.Points(iPts).ApplyDataLabels _
ShowSeriesName:=True, _
ShowCategoryName:=False, ShowValue:=False, _
AutoText:=True, LegendKey:=False
Exit For
End If
Next
End With
Next
' legend is now unnecessary
ActiveChart.HasLegend = False
Application.ScreenUpdating = True
End If
End Sub
我写了很多关于此的文章:
此外,我的商业 Excel 图表软件包含此功能的更新版本。
答案3
我想向您推荐两种选择。第一种是非 VBA,另一种是 VBA 代码。
非 VBA 解决方案:
由于 Excel 没有任何安排来仅分配一个数据标签,因此如果涉及一系列单元格来创建图表。
但是在创建图表之后,您可以重置标签。
在您的例子中,应用标签后,右键单击线条,您会发现标签已准备好编辑。逐个选择标签,然后右键单击并删除或取消选中图表区域旁边的值复选框。
VBA解决方案:
创建一个命令按钮并输入此代码。
请记住,您只需创建图表,但不要应用数据标签。一切准备就绪后,单击命令按钮。代码将首先创建所有数据标签,最后保留最后一个。
请注意,即使没有命令按钮,您也可以将该代码作为 RUN MACRO 运行。
Sub LastDataLabel()
Dim ws As Worksheet
Dim chrt as Chart
Dim srs as Series
Dim pnt as Point
Dim p as Integer
Set ws = ActiveSheet
Set chrt = ws.ChartObjects("Line Chart")
Set srs = chrt.SeriesCollection(1)
srs.ApplyDataLabels
For p = 1 to srs.Points.Count - 1
Set pnt = srs.Points(p)
p.Datalabel.Text = ""
Next
srs.Points(srs.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Size = 10
End Sub
希望这对你有帮助。
答案4
您可以仅选择最后一个点并仅向该点添加数据标签。