VBA学习(5):批量生成小饼图

之前给大家分享了如何用一个函数制作各种常见图表,之后有朋友问,下图中表示精确占比的饼图是怎么批量生成的?

批量生成小饼图有两种常用的方法,一种是用插件,比如Sparklines;另外一种是自己动手丰衣足食,摊手,也就写点VBA小代码得啦。

复制运行以下VBA代码,选择占比值所在的单元格区域,即可批量生成小饼图。

Sub vbaPie()
    Dim cht As ChartObject, rngData As Range, rng As Range
    On Error Resume Next
    For Each cht In ActiveSheet.ChartObjects '删除旧图
        If InStr(cht.Name, "公众号Excel星球") Then cht.Delete
    Next
    Set rngData = Application.InputBox("请选择数据区域", Default:=Selection.Address, Type:=8)
    If Err Then Exit Sub
    rngData.Parent.Select
    Set rngData = Intersect(rngData, ActiveSheet.UsedRange)
    If rngData Is Nothing Then MsgBox "请选择有效数据区域": Exit Sub
    For Each rng In rngData '遍历单元格
        Call CreateCht(rng, Array(rng.Value, 1 - rng.Value))
    Next
    rngData(1).Select
End Sub

Function CreateCht(rng As Range, aRef)
    On Error Resume Next
    Dim cht As ChartObject
    Set cht = ActiveSheet.ChartObjects.Add(100, 100, 200, 200)
    With cht.Chart '图表
        .ChartType = xlPie '指定图表类型
        .SeriesCollection.NewSeries '新系列
        .SeriesCollection (1)
        With .SeriesCollection(1)
            .Values = aRef '数据
            .Points(1).Format.Fill.ForeColor.RGB = RGB(64, 64, 64) '占比颜色
            .Points(2).Format.Fill.ForeColor.RGB = RGB(166, 166, 166) '其它占比颜色
        End With
        .ApplyDataLabels -xlDataLabelsShowNone '干掉标签
        .Legend.Delete '干掉图例
        .ChartTitle.Delete '干掉标题
        With .PlotArea '设置绘图区大小
            .Select
            .Top = 0
            .Height = 170
            .Width = 170
            .Left = 0
        End With
    End With
    cht.Name = "看见星光" & rng.Address  '图表命名
    With ActiveSheet.Shapes(cht.Name)
        .Fill.Visible = msoFalse '取消填充色
        .Line.Visible = msoFalse '取消线条色
        .Height = rng.Height '高
        .Width = rng.Height '宽
        .Top = rng.Top + 1 '位置top
        .Left = rng.Left + 1 '位置left
    End With
End Function

技术交流,软件开发,欢迎微信沟通:

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言可以使用ggplot2包来画饼图。要实现大饼套小饼的效果,可以通过调整数据和绘图参数来实现。首先,你需要准备两组数据,一组用于大饼,一组用于小饼。然后,你需要使用geom_bar函数来绘制饼图。 下面是具体的步骤: 1. 导入ggplot2包:使用library(ggplot2)命令导入ggplot2包。 2. 准备数据:将大饼和小饼的数据分别存储在两个向量中。 3. 创建数据框:使用data.frame函数将两个向量合并为一个数据框。 4. 绘制饼图:使用ggplot函数创建一个绘图对象,并使用geom_bar函数指定绘制饼图。在geom_bar函数中,通过设置fill参数来指定饼图的颜色。 5. 调整饼图大小:使用coord_polar函数来调整饼图的大小。通过设置theta参数来控制内外饼图的比例。 下面是一个示例代码: ```R library(ggplot2) # 准备数据 big_pie <- c(70, 30) small_pie <- c(40, 60) # 创建数据框 df <- data.frame(big_pie, small_pie) # 绘制饼图 ggplot(df, aes(x = "", y = big_pie, fill = "Big Pie")) + geom_bar(width = 1, stat = "identity") + coord_polar(theta = "y") + geom_bar(aes(x = "", y = small_pie, fill = "Small Pie"), width = 0.6, stat = "identity") + scale_fill_manual(values = c("Big Pie" = "red", "Small Pie" = "blue")) + theme_void() ``` 这段代码会生成一个大饼套小饼的饼图,大饼的比例为70:30,小饼的比例为40:60。你可以根据实际需求调整数据和绘图参数来生成不同的饼图效果。<span class="em">1</span> #### 引用[.reference_title] - *1* [小饼叮当 最爱铜锣烧](https://blog.csdn.net/weixin_30352645/article/details/95170673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值