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

时间:2010-02-26 04:02:40

标签: excel excel-formula

好的,这就是我想要完成的事情。对于此示例,我有一个由4个数据表和一个总计表组成的工作簿。 4个数据表中的每一个都具有相同的名称,其中相同的模式是唯一的区别是日期。 (例如,9854978_1009_US.txt,其中1009是更改的日期,而文件名的其余部分是相同的)。在每个文档中,列F包含一系列数字,我想找到它的总和,但我不知道F中有多少单元格实际包含数字。 (但是下面永远不会有数字的附加信息,所以我理论上可以将整个F列加在一起)。我还将随着时间的推移将新文件添加到工作簿中,并且不希望重写我从F列收集数据的代码。基本上我想要完成的是'totalals'文档占用每列F来自工作簿中名为“9854978 _ ???? _ US.txt”的文档,其中问号根据文件名更改。我将如何在纯Excel代码中执行此操作?

2 个答案:

答案 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