我一直试图找到一种方法来移动数据标签在点之上或之下。
从第1点开始,对于每两个连续点,我想将数据标签移动到该点之上,而对于接下来的2,我想将它们移动到下面。我不确定如何更改for循环或if语句来适应这种情况。所以最后,第1点和第2点的数据标签位于上方,第3点和第4点的数据标签位于下方,5和6位于......等等
如果有人可以提供帮助,我会非常感激。
Dim FlowIndex As Long
With ActiveChart.SeriesCollection(1)
For FlowIndex = 1 To .Points.Count
With .Points(FlowIndex)
If .HasDataLabel Then
With .DataLabel
.Position = xlLabelPositionAbove
.Orientation = xlHorizontal
End With
End If
End With
Next
End With
答案 0 :(得分:0)
这是如何执行循环的数学问题。想想值1,2,3,4,5,6,7,8。什么数学规则会将1,2,5,6放在同一组中,将3,4,7,8放在另一组中?
可能的答案:除以4,1和& 2轮下降到0.3& 4轮到1. 7& 8轮到3.所以,一组向上舍入为偶数,一组向下舍入为奇数。有很多方法可以反映这个原则,但这里有一个:
IF FlowIndex MOD 4 = 1 OR FlowIndex MOD 4 = 2 then 'There is a remainder of 1 or 2 when divided by 4 - put label above
'Do stuff
Else 'There is a remainder of 3 or 0 when divided by 4 - put label below
'Do other stuff
End If
为了澄清我对你最后一个问题的回答,MOD是一种分割方法,它在进行整数除法后返回余数。所以5 MOD 3是2,9 MOD 3是0等
答案 1 :(得分:0)
鸿沟
1, 2, 3, 4, 5, 6, 7, 8
by 2,并向上舍入,得到:
1, 1, 2, 2, 3, 3, 4, 4
然后你可以测试1, 1, 2, 2, 3, 3, 4, 4
是奇数还是偶数。如果是奇数,则在上面标记。如果是偶数,则在下面标注。
答案 2 :(得分:0)
可替换地:
bLabelAbove = True
For i = 0 to 20 step 2
For j = 1 to 2
If bLabelAbove Then
Series.DataLabels(i + j).Position = xlLabelPositionAbove
Else
Series.DataLabels(i + j).Position = xlLabelPositionBelow
End If
Next
bLabelAbove = Not bLabelAbove
Next