【问题标题】:Excel get cell value from multiple workbooksExcel从多个工作簿中获取单元格值
【发布时间】:2016-08-11 21:50:08
【问题描述】:

大家早上好,

我正在寻找可能的替代方案来替代我当前将数据从多个“单元”工作簿导入“主”工作簿的系统。我的每个“单元”工作簿都是从固定模板构建的,因此它们的工作表名称和单元格引用始终相同。 (工作表名称为:Jan, Feb, Mar, Apr, ... Dec)(文件名称为:YYYY_Location_Description)

理想情况下,我希望能够通过所有打开的工作簿文件简单地执行 sumproduct。我知道我可以通过使用 Jan:Dec!A2:D5 的工作表来做到这一点。但是有没有办法让它适应所有打开的工作簿文件?

目前我有一个宏,它系统地运行 DIR 列出的所有文件,并将数据从“单元”表中一次复制一个条目并将其粘贴到摘要表中。

每个月的“单位”表由一个月中每一天的行和列组成,如下所示:

UnitA
Date   HrsA    HrsB    ValueA    ValueB    ValueC  ...
1      24      0       0.01      0.02      0.01
2      0       24      0.01      0.015     0.012
...

然后将宏复制的数据按以下格式放置:

Master
Date   Location    Value    HrsA    HrsB    Entry
1      UnitA       ValueA   24      0       0.01
1      UnitA       ValueB   24      0       0.02
1      UnitA       ValueC   24      0       0.01
1      UnitA       ValueA   0       24      0.01
1      UnitA       ValueB   0       24      0.015
1      UnitA       ValueC   0       24      0.012

这是“主”摘要表中的大量数据。我宁愿做的是:

=sum('[Workbook1.xls:WorkbookN.xls]Jan:Dec'!$A$2:$D$5)

有没有可能做这样的事情?

谢谢,

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    尝试这样的事情,只需遍历每个打开的工作簿并评估指定范围的 Sum,然后将该值写入 ActiveCell(或需要放置的任何位置)

    Sub foo()
    Dim wb as Workbook
    Dim ret
    
    For Each wb in Application.Workbooks
        '[Workbook1.xls:WorkbookN.xls]Jan:Dec'!$A$2:$D$5)
        ret = ret + Application.WorksheetFunction.Sum( _
                        "'[" & wb.Name & "]Jan:Dec'!$A$2:$D$5")
    Next
    
    ActiveCell.Value = ret
    End Function
    

    或者试试这个来构建公式字符串:

    Sub foo(Optional sheetRange As String = "Jan:Dec", Optional cellsRange As String = "A2:D5")
    Dim wb As Workbook
    Dim ret
    
    For Each wb In Application.Workbooks
        ret = ret & "SUM('[" & wb.Name & "]" & sheetRange & "'!" & cellsRange & ")+"
    Next
    ret = Left(ret, Len(ret) - 1)
    ret = "=" & ret
    ActiveCell.Formula = ret
    End Sub
    

    【讨论】:

    • 我希望尽可能不涉及任何 VBA。尽管使用您的建议,我可以将数据预先评估为每个报告所需的粒度级别。理想情况下,如果我可以通过所有打开的工作簿将其作为公式参考......
    • 如果您已经在使用宏,为什么不直接扩展它来求和呢?您可以调整上面的 VBA 来构建公式字符串(见上文)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多