KutoolsforOffice — 一套方案,五大工具。事半功倍。

如何在 Excel 中创建堆积簇状柱形图或条形图?

作者小阳修改日期

在专业数据分析场景中,将多个类别和数据组整合到单张图表中,有助于实现更清晰的对比与更高效的数据解读。一个常见需求是同时呈现堆积与簇状数据——例如,按区域和季度分组,并排展示各组的销售值。本文将逐步指导您在 Excel 中创建堆积簇状柱形图,让您既能通过簇状条形比较不同类别的总体数值,又能在每个簇内以堆积段展现其内部构成。这种方法支持在组间及多个变量之间进行强有力的对比分析,如下方截图所示。

工作表中堆积簇状柱形图的截图


在 Excel 中创建堆积簇状柱形图

要在 Excel 中创建堆积簇状柱形图,需注意 Excel 本身并不原生支持此类图表,但通过精心准备数据并自定义图表布局,即可巧妙模拟出这一效果。

✅ 首先需要了解的内容:

  • Excel 提供内置的“堆积簇状柱形图”类型,该效果需通过巧妙的数据布局来实现。
  • 您必须重新组织源数据,才能模拟簇状分组效果。
  • 在类别组之间添加空白行,以在视觉上清晰分隔各个簇。

下面我们将使用多季度产品销售示例数据,逐步演示整个过程。

1. 整理原始数据: 本例中,A 列为产品名称,相邻列为销售数据(例如 Q1 和 Q2 的实际值与目标值)。目标是将每个产品的数据并排分组,并在每个簇内以堆积方式展示实际值与目标值。

2. 重新组织数据: 您需将每组数据(例如每个产品行)复制到新布局中,并在各组之间插入一个空行,以便 Excel 能将每组数据识别为堆积柱形图中的独立簇。

在每组数据和标题行后插入空白行的截图

3. 创建图表: 选中重新整理后的数据,然后依次点击插入 > 柱形图或条形图 > 堆积柱形图

在“插入”选项卡下选择“堆积柱形图”的截图

4. 设置数据系列格式: 右键单击图表中的任意柱形,选择设置数据系列格式

打开“设置数据系列格式”对话框的截图

5. 减小间距宽度:设置数据系列格式窗格中,转到系列选项,并将 间距宽度设为 0%,即可在视觉上将每组压缩为一个堆积簇。

在“设置数据系列格式”窗格中将“间距宽度”更改为0的截图

6. 调整图例和布局: 右键单击图例,选择设置图例格式

在Excel中打开“设置图例格式”窗格的截图

7. 选择图例位置:设置图例格式窗格中,于图例选项下选择合适的图例位置(右侧、顶部、左侧或底部),以完美适配图表布局并避免与数据重叠。

选择图例位置的截图

✅ 结果:您已成功创建一个堆积簇状柱形图,每个产品的实际值与目标值数据分组并堆叠呈现,便于快速对比分析!

⚠️ 局限性:此方法适用于小型数据集,但对于大型或频繁变动的数据集,手动重新整理容易出错。请参阅以下章节,了解如何通过 VBA 和公式自动完成该操作的解决方案。


VBA 代码 – 自动重塑数据并生成图表

处理大型数据集或频繁更新的报告时,手动重新排列数据以创建堆积簇状柱形图不仅繁琐,还容易出错。借助 VBA(Visual Basic for Applications),您可以自动化整个流程——从重塑源数据表到插入图表,大幅节省时间和精力。

此方法最适合熟悉 Excel 宏或允许使用 VBA 的环境。如果您的图表结构保持不变但数据定期更新,该方法尤为有效。具体实施步骤如下:

步骤 1: 按下 Alt + F11 打开 VBA 编辑器,然后单击插入> 模块

步骤 2: 将以下 VBA 代码粘贴到模块窗口中:

Sub CreateStackedClusteredChart()
    Dim ws As Worksheet
    Dim rngData As Range
    Dim chartObj As ChartObject
    Dim chartRange As Range
    Dim xTitleId As String

    On Error Resume Next
    Set ws = ActiveSheet
    xTitleId = "KutoolsforExcel"

    ' Prompt user to select original data
    Set rngData = Application.InputBox("Select the original grouped data (including all headers):", xTitleId, Selection.Address, Type:=8)
    If rngData Is Nothing Then Exit Sub

    ' Create new worksheet for reshaped data
    Dim wsChartData As Worksheet
    Set wsChartData = Worksheets.Add
    wsChartData.Name = "ChartData_" & Format(Now(), "hhmmss")

    Dim numRows As Long, numCols As Long, i As Long, j As Long, outRow As Long
    numRows = rngData.Rows.Count
    numCols = rngData.Columns.Count
    outRow = 1

    ' Add headers
    wsChartData.Cells(outRow, 1).Value = "Category"
    For j = 2 To numCols
        wsChartData.Cells(outRow, j).Value = rngData.Cells(1, j).Value
    Next j
    outRow = outRow + 1

    ' Copy data and insert blank rows
    For i = 2 To numRows
        For j = 1 To numCols
            wsChartData.Cells(outRow, j).Value = rngData.Cells(i, j).Value
        Next j
        outRow = outRow + 1
        If i < numRows Then
            wsChartData.Cells(outRow, 1).Value = ""
            outRow = outRow + 1
        End If
    Next i

    ' Define chart data range
    Set chartRange = wsChartData.Range(wsChartData.Cells(1, 1), wsChartData.Cells(outRow - 1, numCols))

    ' Insert chart
    Set chartObj = wsChartData.ChartObjects.Add(Left:=100, Top:=30, Width:=500, Height:=350)
    With chartObj.Chart
        .SetSourceData Source:=chartRange
        .ChartType = xlColumnStacked
        .HasTitle = True
        .ChartTitle.Text = "Stacked Clustered Column Chart"
        .Legend.Position = xlLegendPositionRight
        .ChartGroups(1).GapWidth = 0
    End With

    MsgBox "Chart generated successfully.", vbInformation, "KutoolsforExcel"
End Sub

步骤 3: 按下 Alt + F8 即可打开宏对话框,选择 CreateStackedClusteredChart 并单击运行

步骤 4: 当出现提示时,请选择包含标题的原始数据集。宏将自动生成一个新工作表(其中已插入空白行),并自动创建堆积簇状柱形图。

📝 提示:

  • 确保您的原始表格拥有统一的列标题和格式。
  • 当您的数据集更新时,可随时重新运行宏,无需重复手动操作。

✅ 优点:节省时间、布局精准,非常适合制作周期性报告。
⚠️ 缺点:需在启用宏的 Excel 环境中使用,并具备基本的 VBA 操作经验。


Excel 公式 – 动态重塑数据以创建堆积簇状图表

如果您不想使用 VBA,或需要一种能在原始数据变化时动态更新图表的解决方案,可借助公式将源数据重塑为堆积簇状图表所需的正确布局。通过结合使用 INDEXTRANSPOSE 等内置函数与辅助列,即可轻松设置一个数据转换区域,始终以最少操作为图表提供正确结构。

当您的原始数据定期更新(例如新增周期、类别等),且希望图表能自动调整而无需手动重构时,这种方法尤为实用。其核心在于构建一个“辅助”区域,通过公式自动提取并排列数据块与空白行,确保图表的数据源始终与最新数据保持同步。

以下是一个设置示例:

  • 假设您的原始数据位于 A1:D7(其中 )A1 为左上角单元格),结构如下:A 列为区域/类别,B、C、D 列分别为子类别数值(例如 Q1、Q2、Q3)。
  • 您希望将每个类别显示为一个簇,其中 Q 值堆积显示,并使用空白行分隔各簇。

1. 在新工作表或相邻区域中创建辅助结构,用于提取每个组并插入空白行。例如,将第一行数据复制到 E2:G2:

=INDEX($A$2:$D$7,INT((ROW()-2)/2)+1,COLUMN()-4+1)

根据需要向下拖动此公式。若要在各组之间插入空白行,请设置一个 IF 公式,使其在交替行返回空值(““):

=IF(ISODD(ROW()), "", INDEX($A$2:$D$7,ROW()/2,COLUMN()-4+1))

结合使用这些公式,并配合精心设计的引用,以输出重新整理后的数据,并在固定间隔处包含空白行。

2. 完成转换区域(包含堆叠和簇状结构)后,选中该新区间,并按照前文介绍的原始方法创建堆积柱形图(插入> 堆积柱形图)。此后,图表将自动反映您对原始数据表所做的任何更改。

处理大型数据集时,建议使用 OFFSET 函数,让数据提取更灵活,或通过动态命名区域定义图表数据源。

优点:无需 VBA 或宏,适用于脚本受限的环境。
缺点:大型数据集的公式设置较复杂,超大动态区域可能引发性能延迟。

故障排除:如果图表未正确更新,请仔细检查辅助公式中的引用错误或不匹配问题。确保已正确插入空白行——它们是实现“簇状”外观的关键!


更多相关图表文章:

  • 在 Excel 中创建一个条形图覆盖另一个条形图
  • 当我们使用两个数据系列创建簇状条形图或柱状图时,它们的条形会并排显示。但有时,为了更清晰地对比这两个数据系列,我们需要采用叠加或重叠的条形图。本文将为您介绍如何在 Excel 中创建重叠条形图。
  • 在 Excel 中创建阶梯图
  • 阶梯图用于展示在不规则时间间隔内发生的变化,是折线图的一种延伸形式。然而,Excel 并未提供直接创建阶梯图的功能。本文将手把手教您如何在 Excel 工作表中一步步打造专业的阶梯图。
  • 在 Excel 中创建钟形曲线图表模板
  • 钟形曲线图表(统计学中称为正态概率分布)常用于展示各类事件发生的可能性,其峰值代表最可能出现的结果。本文将指导您利用自有数据创建钟形曲线图表,并将工作簿保存为 Excel 模板。
  • 在 Excel 中创建含多个系列的创建气泡图
  • 众所周知,要快速创建气泡图,通常会将所有系列合并为一个系列,如截图 1 所示。但现在我将告诉您如何在 Excel 中创建包含多个系列的气泡图,如截图 2 所示。

  • 超级编辑栏(轻松编辑多行文本和公式);阅读版式(轻松阅读和编辑大量单元格);粘贴到筛选范围……
  • 合并单元格/行/列并保留数据;分割单元格内容;合并重复行并求和/求平均值……防止重复项单元格;比较区域……
  • 选择重复或唯一行;选择空白行(所有单元格均为空);超级查找和模糊查找多个工作簿中的内容;随机选择……
  • 精准公式复制多个单元格而不更改公式引用;自动创建引用到多个工作表;插入项目符号、复选框等更多功能……
  • 收藏并快速插入公式、区域、图表和图片;加密单元格并设置密码;创建邮件列表并发送电子邮件……
  • 提取文本、添加文本、删除某位置字符、删除空格;创建并打印数据分页统计;在单元格内容与批注之间转换……
  • 超级筛选(保存并应用筛选方案到其他工作表);高级排序按月/周/日、频率等分组;特殊筛选按加粗、倾斜等格式……
  • 合并工作簿和工作表;汇总表格基于关键列;分割数据到多个工作表批量转换 xls、xlsx 和 PDF……
  • 数据透视表按周数、星期几等分组……显示未锁定、选区锁定并以不同颜色标识;高亮显示包含公式/名称的单元格……
kte tab 201905
  • 在 Word、Excel、PowerPoint、Publisher、Access、Visio 和 Project 中启用标签式编辑与阅读,大幅提升多文档操作效率!
  • 在同一个窗口的新标签页中打开并创建多个文档,而非在新窗口中操作。
  • 将您的工作效率提升 50%,每天减少数百次鼠标点击!
officetab bottom