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


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



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

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




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

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

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



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

欢迎点击关注,后续会有更多精彩内容!

发送“链接”,可获得Excel模板及历史文章模板。