对数百个Excel工作簿中的同一单元格求和



我有大约500张时间卡。每个考勤卡都是自己的文件(.xls工作簿(。我需要所有这些工作簿中的K5细胞总数。这是一件一次性的事情(每季度(——如果500多张时间卡中的任何一张发生了变化,我不需要更新结果。

如果有一个函数需要两个参数,那就太好了——1(包含Excel文件的目录的名称;2( 要合计的特定单元格。

经过3.5个小时的搜索,Excel论坛没有任何帮助。我一定是用了不好的关键词,因为我不敢相信Excel没有这么基本的功能。(如果我在同一个工作簿中有多个工作表,我确实发现了一些东西——我们将无法在同一文件中维护所有的时间卡,同时浏览和打开所有工作簿将非常乏味——双击500多次。(

谢谢。

(Windows XP SP3;Microsoft Office Excel 2003(

这是一些代码,它将提示选择一个文件夹,然后循环该文件夹中工作表名称[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

最新更新