如何从一个工作簿中的多个工作表中的同一列收集数据?

好的,这就是我想要完成的。 对于这个例子,我有一个单一的工作簿组成的4个数据表加总表。 4个数据表中的每一个都具有相同的名称,其中唯一不同的是date。 (例如9854978_1009_US.txt,其中1009是在文件名的其余部分相同时更改的date)。 在这些文件的每一列F都包含一系列我想要find的数字,但是我不知道F中有多less个单元格实际上包含数字。 (但是,下面的数字永远不会有额外的信息,所以我理论上可以将整个F列加在一起)。 我也会随着时间的推移将新文件添加到工作簿中,而不希望重写从F列收集数据的代码。基本上,我想要完成的是“总计”文档将每列F从名为“9854978 _ ???? _ US.txt”的工作簿中的文档中,问号根据文件名进行更改。 我将如何去纯粹的Excel代码中做这个?

在这样的情况下,我会推荐使用VBA,但是我发现只有Excel公式的解决scheme(公认效率低下)。

在新的单元格A1中写入1,然后在下面的单元格中input2。 select两个单元格并向下拖动。 自动完成function将从1开始生成数字,直到拖动结束。 继续下去,直到达到9999

在单元格B1中,将公式=TEXT(A1,"000#") ; 将公式向下拖动以将文本从00019999

在单元格C1中放入公式="9854978_"&B1&"_US.txt" ; 向下拖动公式以将文本从9854978_0001_US.txt到9854978_9999_US.txt

在单元格D1中input公式: =if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F"))) ; 将公式向下拖动以获得总和。

这个解决scheme可能变得不那么低效,减less了可能的数字集合。 缺less一年的可能date只有365。

PS:公式可能会有点不对,因为我从我的本地化版本的Excel中翻译了它们。

这是一个可以做这个计算的函数:

 Function TotalColF() As Double Dim wks As Worksheet For Each wks In ThisWorkbook.Worksheets If left(wks.name,7) = "9854978" then TotalColF = TotalColF + Application.WorksheetFunction.Sum(wks.Range("F:F")) End If Next wks End Function 

这不是一个易失性函数,所以如果添加另一个工作表,或者更改列F中的值,修改后的总和将不会显示,直到您按Ctrl + Alt + F9强制重新计算。

如果你需要一个挥发性的function,总是显示正确的总数,让我知道。 挥发性函数可能会使重新计算时间变慢,但这对您来说可能不是问题。

如果通过VBA添加新工作表,则可以使用VBA指令来强制重新计算:Application.CalculateFull