好的,这就是我想要完成的事情。对于此示例,我有一个由4个数据表和一个总计表组成的工作簿。 4个数据表中的每一个都具有相同的名称,其中相同的模式是唯一的区别是日期。 (例如,9854978_1009_US.txt,其中1009是更改的日期,而文件名的其余部分是相同的)。在每个文档中,列F包含一系列数字,我想找到它的总和,但我不知道F中有多少单元格实际包含数字。 (但是下面永远不会有数字的附加信息,所以我理论上可以将整个F列加在一起)。我还将随着时间的推移将新文件添加到工作簿中,并且不希望重写我从F列收集数据的代码。基本上我想要完成的是'totalals'文档占用每列F来自工作簿中名为“9854978 _ ???? _ US.txt”的文档,其中问号根据文件名更改。我将如何在纯Excel代码中执行此操作?
答案 0 :(得分:0)
在这种情况下,我建议使用VBA,但我发现只有excel公式的(当然效率低下)解决方案。
在新工作表的单元格A1中写入1,然后在下面的单元格中为2。 选择两个单元格并向下拖动。自动完成功能将生成从1到拖动结束的数字。继续,直到你达到9999
在单元格B1中放入公式=TEXT(A1,"000#")
;向下拖动公式以将文本从 0001 获取到 9999 。
在单元格C1中放入公式="9854978_"&B1&"_US.txt"
;拖动公式以获取从9854978_0001_US.txt到9854978_9999_US.txt的文本
在单元格D1中放入公式:
=if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F")))
;拖动公式以获得总和。
解决方案可能会降低效率,减少可能的数字集。错过了一年,可能的日期只有365个。
PS:公式可能有点错误,因为我从我的本地化版本的Excel中翻译了它们。
答案 1 :(得分:0)
这是一个可以进行此计算的函数:
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强制重新计算之前,修订后的总数不会显示。
如果您需要一个始终显示正确总数的易失功能,请告诉我。易失性函数可能会使重新计算时间变慢,但这对您来说可能不是问题。
如果要通过VBA添加新工作表,可以使用VBA指令强制重新计算:Application.CalculateFull