如何让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
我有一个 折线图 显示月度销售变动(向上 或 向下) 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