You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在MS Excel 2016中创建双数据集stacked column chart(支持VBA)

在Excel 2016中创建双数据集簇状堆叠柱形图

嘿,很高兴帮你搞定这个需求!我之前也处理过类似的Excel图表问题,完全可以实现你想要的效果——横轴显示年份,每个年份下两个并排的堆叠柱(分别对应两个国家的月度数据),不用VBA手动就能做,要是需要自动化的话VBA也能轻松搞定。

方法一:手动操作(无需VBA)

1. 调整数据布局

Excel的簇状堆叠柱形图对数据格式有明确要求,你需要把两个国家的月度数据整理成同一行对应同一年份的结构。比如:

年份国家A_1月国家A_2月...国家A_12月国家B_1月国家B_2月...国家B_12月
2020100150...200120180...220
2021110160...210130190...230

如果你的原始数据是分开的两个表格(一个国家一个表),直接复制粘贴合并成上面的结构就行;如果是长格式数据(比如每行是「年份-国家-月份-数值」),可以用数据透视表快速整理:

  • 选中所有数据,插入数据透视表
  • 行区域放「年份」,列区域先放「国家」再放「月份」,值区域放「数值」
  • 透视表生成后,就是我们需要的标准结构啦

2. 创建簇状堆叠柱形图

  • 选中整理好的数据区域(包括表头)
  • 点击「插入」选项卡 → 柱形图 → 选择簇状堆叠柱形图(就是那种既有簇状并排又有堆叠效果的图标)

3. 优化图表格式

  • 统一色系:选中国家A的所有月度系列(按住Ctrl点选),设置成同一系列的配色(比如深浅不同的蓝色);同理给国家B设置另一套色系(比如橙色系),这样一眼就能区分两个国家
  • 调整标签:添加数据标签(右键系列 → 添加数据标签),如果堆叠的标签太多,可以只显示每个堆叠柱的总和,或者调整标签位置避免重叠
  • 美化细节:修改横轴、纵轴标题,调整柱形间距,去掉多余的网格线等

方法二:VBA自动化(适合频繁更新数据的场景)

如果你的数据需要经常更新,每次手动调整太麻烦,可以用VBA一键生成图表。下面是一段示例代码,你可以根据自己的实际数据范围修改:

Sub CreateDualStackedColumnChart()
    Dim ws As Worksheet
    Dim chartObj As ChartObject
    Dim dataRange As Range
    
    ' 设置工作表(改成你的工作表名称)
    Set ws = ThisWorkbook.Worksheets("数据")
    ' 设置数据范围(改成你的实际数据区域,包括表头)
    Set dataRange = ws.Range("A1:Y3") ' 假设A列是年份,B-M列是国家A的12个月,N-Y列是国家B的12个月
    
    ' 删除已有同名图表(避免重复)
    On Error Resume Next
    ws.ChartObjects("双国家堆叠柱形图").Delete
    On Error GoTo 0
    
    ' 创建新图表
    Set chartObj = ws.ChartObjects.Add(Left:=100, Width:=800, Top:=100, Height:=500)
    chartObj.Name = "双国家堆叠柱形图"
    
    ' 设置图表类型和数据源
    With chartObj.Chart
        .ChartType = xlColumnStackedClustered ' 簇状堆叠柱形图类型
        .SetSourceData Source:=dataRange
        .HasTitle = True
        .ChartTitle.Text = "两国年度月度数据堆叠对比"
        
        ' 设置横轴标题
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Text = "年份"
        
        ' 设置纵轴标题
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Text = "数值"
        
        ' 统一国家A的系列配色(蓝色系渐变)
        Dim i As Integer
        For i = 1 To 12
            .SeriesCollection(i).Format.Fill.ForeColor.RGB = RGB(50 + i*10, 100 + i*10, 200)
        Next i
        
        ' 统一国家B的系列配色(橙色系渐变)
        For i = 13 To 24
            .SeriesCollection(i).Format.Fill.ForeColor.RGB = RGB(200, 100 + (i-12)*10, 50)
        Next i
    End With
End Sub

使用方法:

  • 按Alt+F11打开VBA编辑器
  • 插入模块,把代码粘贴进去
  • 修改wsdataRange的参数,匹配你的数据位置
  • 运行宏,就能自动生成符合要求的图表啦

这样生成的效果就和你提到的示例完全一致,每个年份下两个并排的堆叠柱,既能展示每个国家的月度数据细分,也能直观对比两国的年度总和~

内容的提问来源于stack exchange,提问作者Ema

火山引擎 最新活动