当你想知道整体由哪些部分组成,以及各组成部分的占比情况如何时,你可能会制作一张饼图,或者一张圆环图。

当你为图表添加数据标签时,它或许是下面这种情形。

怎样让Excel饼图与环形图的标签整齐划一?-天天办公网

Excel自带的标签显示方式并不美观,标签往往杂乱无章,像一只蜘蛛。

通过琢磨,研究,我编辑了一键优化的表格。效果如下:

 

怎样让Excel饼图与环形图的标签整齐划一?-天天办公网

怎样让Excel饼图与环形图的标签整齐划一?-天天办公网

显然,优化后的图表相对于原表美观、清晰很多。

利用模板,也可以优化其它表格的饼图标签。

首先打开饼图标签设置VBA表,然后在需要执行的表里点击宏,运行即可。

 

怎样让Excel饼图与环形图的标签整齐划一?-天天办公网

VBA代码如下,虽然对于系列过多的饼图仍然需要部分调整,但是依然值得学习和使用。

Sub 标签设置()
Dim Lbl As DataLabel
Dim Cht As Object
Dim chartWd, chartHt
Dim OldTop, OldLeft
Dim LblWd, LblHt
On Error Resume Next
ActiveChart.FullSeriesCollection(1).DataLabels.Position = xlLabelPositionCenter
Set Cht = ActiveChart
For i = 1 To Cht.SeriesCollection(1).Points.Count
Set Lbl = Cht.SeriesCollection(1).Points(i).DataLabel
'获取图表高度和宽度
Chtname = ActiveChart.Name
shtname = ActiveSheet.Name
n = Trim(Replace(Chtname, shtname, ""))
ChtWd = ActiveSheet.Shapes(n).Width
ChtHt = ActiveSheet.Shapes(n).Height
'存储数据标签原位置
OldTop = Lbl.Top
OldLeft = Lbl.Left
'计算标签尺寸
LblWd = Lbl.Width
LblHt = Lbl.Height
Debug.Print LblWd
'调整标签位置
Lbl.Top = OldTop
If Lbl.Left + LblWd / 2 > ChtWd / 2 Then
'右侧标签
Lbl.Left = ChtWd - Lbl.Width
'插入直线AddConnector (Type、BeginX、BeginY、EndX、EndY)
BeginX = OldLeft + LblWd / 2
BeginY = Lbl.Top + LblHt / 2
EndX = Lbl.Left
EndY = BeginY
ActiveChart.Shapes.AddConnector(msoConnectorStraight, BeginX, BeginY, EndX, EndY).Select
Else
'左侧标签
Lbl.Left = 0
'插入直线AddConnector (Type、BeginX、BeginY、EndX、EndY)
BeginX = Lbl.Left + LblWd
BeginY = Lbl.Top + LblHt / 2
EndX = OldLeft + LblWd / 2
EndY = BeginY
ActiveChart.Shapes.AddConnector(msoConnectorStraight, BeginX, BeginY, EndX, EndY).Select
End If
Next
ActiveChart.FullSeriesCollection(1).HasLeaderLines = False
End Sub