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

时间:2016-04-19 15:36:14

标签: excel excel-vba excel-formula vba

早上好,

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