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

如何自动将不同发票工作表的指定单元格数据汇总至日志表?

解决方法

方法1:用公式实现批量引用不同工作表的D21(动态引用)

如果日志表的A列已填入各发票工作表的名称(比如A1为"INV-001"、A2为"INV-002"),在B1单元格输入以下公式:

=INDIRECT("'"&A1&"'!D21")

下拉填充时,公式会自动匹配A列对应的工作表名称,读取该表D21的值。

若不想手动输入工作表名称,可在A1单元格输入数组公式(输入后按Ctrl+Shift+Enter确认),自动提取当前工作簿除日志表外的所有工作表名(假设日志表名为"日志"):

=INDEX(GET.WORKBOOK(1),ROW()+1)&T(NOW())

搭配上述INDIRECT公式,就能自动生成所有发票表的金额引用。

方法2:用VBA自动将D21静态值写入日志表(推荐,彻底解放手动操作)

这个方法能让你复制模板工作表并重命名后,自动把该表D21的静态值写入日志表最后一行,无需手动输入公式:

  1. 按Alt+F11打开VBA编辑器
  2. 在左侧工程窗口找到你的工作簿,右键选择「插入」→「模块」
  3. 粘贴以下代码:
Sub 新增发票并记录金额()
    Dim 模板表 As Worksheet
    Dim 新发票表 As Worksheet
    Dim 日志表 As Worksheet
    Dim 发票编号 As String
    Dim 应付总额 As Double
    
    ' 根据实际情况修改模板表和日志表名称
    Set 模板表 = ThisWorkbook.Worksheets("模板")
    Set 日志表 = ThisWorkbook.Worksheets("日志")
    
    ' 输入发票编号
    发票编号 = InputBox("请输入发票编号:")
    If 发票编号 = "" Then Exit Sub
    
    ' 复制模板表并重命名
    模板表.Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    Set 新发票表 = ActiveSheet
    新发票表.Name = 发票编号
    
    ' 获取静态金额并写入日志表
    应付总额 = 新发票表.Range("D21").Value
    With 日志表
        Dim 最后一行 As Long
        最后一行 = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Cells(最后一行, "A").Value = 发票编号
        .Cells(最后一行, "B").Value = 应付总额
        .Cells(最后一行, "C").Value = "" ' 收款时间列,后续手动填写
        ' 若需自动填创建日期,可替换为:.Cells(最后一行, "C").Value = Date
    End With
    
    MsgBox "发票" & 发票编号 & "已创建,金额已记录到日志表!"
End Sub
  1. 将工作簿保存为启用宏的格式(.xlsm)
  2. 可给宏添加工作表按钮,点击即可一键创建发票并记录金额

如果已手动创建多个发票表,想批量导入所有表的D21静态值,用这个宏:

Sub 批量导入所有发票金额到日志()
    Dim 日志表 As Worksheet
    Dim ws As Worksheet
    Dim 最后一行 As Long
    
    Set 日志表 = ThisWorkbook.Worksheets("日志")
    ' 如需清空现有数据,可取消下面一行注释
    ' 日志表.Range("A2:C" & 日志表.Rows.Count).ClearContents
    
    For Each ws In ThisWorkbook.Worksheets
        ' 跳过模板表和日志表
        If ws.Name <> "模板" And ws.Name <> "日志" Then
            最后一行 = 日志表.Cells(日志表.Rows.Count, "A").End(xlUp).Row + 1
            日志表.Cells(最后一行, "A").Value = ws.Name
            日志表.Cells(最后一行, "B").Value = ws.Range("D21").Value
            日志表.Cells(最后一行, "C").Value = ""
        End If
    Next ws
    
    MsgBox "批量导入完成!"
End Sub

补充:手动将公式结果转为静态值

如果已用公式引用D21,想把公式转为静态值,选中对应单元格区域按Ctrl+C复制,右键选择「粘贴选项」→「值」即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:57:14