如何让Excel图表数据标签根据一定条件自动调整位置?

How to let Excel Chart data label automatically adjust its position based on certain criteria?

我有一个 折线图 显示月度销售变动(向上向下) 12 个月。我有两组数据,并且我已将控件设置为一次 select 一组数据以用于报告目的。

第一个问题是我创建折线图后,所有的数据标签都默认显示在折线上方。但是,我更喜欢在该行下方显示“Down”标签。目前我必须手动将'Down'的那些拖到线下。

第二个问题是我更改了数据集后,比如从Set1到Set2,数据标签位置扭曲了,如果需要我必须手动调整它们。

我想知道

if there is an option to let the data label automatically adjust its position (such as above or below the line) based on certain criteria (such as TRUE vs FALSE, or positive vs negative)?

提前致谢!

遍历数据标签应该很容易,检查它们是否包含 "Down" 或 "Up" 并相应地调整它们的位置。

如果您知道如何在下拉列表更改时触发此功能,您将获得额外奖励(提示:您应该能够使用 Worksheet.Change 事件)。

Sub UpdateLabelPosition()
    Dim myChart As ChartObject
    Set myChart = Sheet1.ChartObjects("Chart 1") ' change sheet and chart name as needed

    With myChart.Chart.SeriesCollection(1)
        If .HasDataLabels Then

            Dim myLabel As DataLabel
            For Each myLabel In .DataLabels
                If InStr(myLabel.Text, "Down") > 0 Then
                    myLabel.Position = xlLabelPositionBelow
                ElseIf InStr(myLabel.Text, "Up") > 0 Then
                    myLabel.Position = xlLabelPositionAbove
                End If
            Next

        End If
    End With
End Sub

编辑:

取对应值为正或负的方法,大概是这样的:

Sub UpdateLabelPosition()
    Dim myChart As ChartObject
    Set myChart = Sheet1.ChartObjects("Chart 1") ' change sheet and chart name as needed

    With myChart.Chart.SeriesCollection(1)
        Dim myValues
        myValues = .Values

        Dim i As Long
        For i = LBound(myValues) To UBound(myValues)
            If .Points(i).HasDataLabel Then
                If myValues(i) < 0 Then
                    .Points(i).DataLabel.Position = xlLabelPositionBelow
                Else
                    .Points(i).DataLabel.Position = xlLabelPositionAbove
                End If
            End If
        Next
    End With
End Sub