在数百个Excel工作簿中汇总相同的单元格

时间:2011-07-04 22:19:24

标签: sum external excel

我有大约500张时间卡。每个时间卡都是它自己的文件(.xls工作簿)。我需要所有这些工作簿中的单元格K5。这是一次性的事情(每个季度) - 如果这500多张时间卡中的任何一张发生变化,我都不需要更新结果。

如果有一个函数带有两个参数 - 1)包含Excel文件的目录的名称,那将会很棒; 2)您想要的特定单元格。

经过3.5小时的搜索,Excel论坛没有帮助。我必须使用错误的关键字,因为我不相信Excel没有这样的基本功能。 (如果我在同一个工作簿中有多个工作表,我确实找到了一些东西 - 我们无法在同一个文件中保存所有这些时间卡,并且同时打开并打开所有工作簿将非常繁琐 - 500 +双击。)

感谢。

(Windows XP SP3; Microsoft Office Excel 2003)

1 个答案:

答案 0 :(得分:1)

这是一些代码,它会提示选择一个文件夹,然后循环该文件夹中的所有文件以获取工作表名称​​ [Worksheetname =“Sheet1”] [CELL =“K5 “] 并将单元格K5中的总数相加。

希望这会让你开始。您需要确保所有文件都具有有效的“工作表名称”或插入测试。

Option Explicit

Private Sub ReadFilesinFolder()
'**Opens File Dialog and cycles all files for batch or just single file
Dim objFs As Object, objF As Object, objF1 As Object, objFc As Object
Dim strEndofPath As String, strFilePath As String, strFilename As String
Dim lngCount As Long, Worksheetname As String, CELL As String, objWB As Workbook, objWS As Worksheet
Dim dblTOTAL As Double

Worksheetname = "Sheet1"
CELL = "K5"


With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False
    .Show

    If .SelectedItems.Count = 0 Then
        End
    End If

    For lngCount = 1 To .SelectedItems.Count
        strEndofPath = InStrRev(.SelectedItems(lngCount), "\")
        strFilePath = Left(.SelectedItems(lngCount), strEndofPath)
        strFilename = Right(.SelectedItems(lngCount), Len(.SelectedItems(lngCount)) - strEndofPath)
    Next lngCount
End With

Set objFs = CreateObject("Scripting.FileSystemObject")
Set objF = objFs.GetFolder(strFilePath)

    'Batch Import
    Set objFc = objF.Files
    For Each objF1 In objFc
    DoEvents

        Set objWB = GetObject(objF1)
        Set objWS = objWB.Sheets(Worksheetname)
        dblTOTAL = dblTOTAL + objWS.Range(CELL).Value

        objWB.Close
        Set objWB = Nothing

    Next objF1
 msgbox dblTOTAL
End Sub