You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibreOffice Calc多工作表条件求和问题求助

在LibreOffice Calc中批量工作表条件求和方案

方法1:数组公式+INDIRECT+工作表名称列表

  1. 先在main表的空白区域(比如D列)按顺序列出所有需要参与计算的工作表名称,例如D1填Sheet1、D2填Sheet2,直到所有工作表名称都列完。
  2. 在目标求和单元格输入以下数组公式,输入完成后按Ctrl+Shift+Enter确认(LibreOffice数组公式需此组合键触发):
=SUM(IF(INDIRECT(D1:D100&".C16")=main.B12, INDIRECT(D1:D100&".M9"), 0))

将公式中的D1:D100替换为你实际的工作表名称列表单元格范围。

公式逻辑:通过INDIRECT动态引用每个工作表的C16单元格,判断是否等于main.B12的条件值,符合条件则引用对应工作表的M9单元格数值,否则取0,最后用SUM汇总所有符合条件的数值。

方法2:自定义宏函数(适合超大量工作表)

如果工作表数量多达上百个,数组公式可能出现卡顿,可通过宏函数实现高效遍历:

  1. 打开Calc后按Alt+F11打开宏编辑器。
  2. 在左侧项目树右键点击当前文档,选择「插入」→「模块」。
  3. 在模块中粘贴以下代码:
Function SUM_SHEETS_CONDITION(criteriaCell As String, checkCell As String, sumCell As String) As Double
    Dim oSheets As Object
    Dim oSheet As Object
    Dim checkVal As Variant
    Dim criteriaVal As Variant
    Dim total As Double
    
    oSheets = ThisComponent.Sheets
    criteriaVal = ThisComponent.Sheets.getByName("main").getCellRangeByName(criteriaCell).Value
    
    total = 0
    For Each oSheet In oSheets
        ' 跳过main表,若需包含则删除此判断
        If oSheet.Name <> "main" Then
            checkVal = oSheet.getCellRangeByName(checkCell).Value
            If checkVal = criteriaVal Then
                total = total + oSheet.getCellRangeByName(sumCell).Value
            End If
        End If
    Next oSheet
    
    SUM_SHEETS_CONDITION = total
End Function
  1. 保存宏后回到Calc,在目标单元格输入:
=SUM_SHEETS_CONDITION("B12", "C16", "M9")

参数说明:

  • 第一个参数"B12":main表中存储条件值的单元格
  • 第二个参数"C16":每个工作表中用于判断条件的单元格
  • 第三个参数"M9":每个工作表中需要求和的单元格

该函数会自动遍历所有工作表,判断每个表的C16是否匹配main.B12,符合条件则累加对应M9的数值。

注意事项

  • 方法1中,工作表名称列表必须与实际工作表名称完全一致,包括大小写、空格等特殊字符。
  • 方法2中,若需要让main表也参与计算,删除代码中的If oSheet.Name <> "main" Then和对应的End If语句即可。
  • 使用宏函数时,文档需启用宏功能,保存时选择支持宏的.ods格式。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:54:58