首页 文章

Excel从多个工作簿中获取单元格值

提问于
浏览
0

大家早上好,

我正在寻找可能的替代方案,将我从多个“单元”工作簿中导入数据的当前系统转换为“主”工作簿 . 我的每个“单元”工作簿都是从固定模板构建的,因此它们的工作表名称和单元格引用始终相同 . (工作表名称为: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)

有可能做这样的事吗?

谢谢,

1 回答

  • 0

    尝试这样的事情,只需遍历每个打开的工作簿并评估指定范围的 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
    

相关问题