四时宝库

程序员的知识宝库

让Excel饼图与环形图的标签整齐划一

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


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



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模板及历史文章模板。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接