仅向最后一个值添加数据标签

仅向最后一个值添加数据标签

所以我有一个包含多条线的折线图。就像这样。 在此处输入图片描述

我想为每一行添加数据标签,但只为右边的最后一个值添加。

我知道是否可以删除单个标签。但是当我向表中添加新值时,新值将带有新标签,这很好,但是我必须手动删除之前的标签。有没有办法让标签自动向右移动?

在此处输入图片描述

答案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

您可以仅选择最后一个点并仅向该点添加数据标签。

相关内容