Суммирование одной ячейки в сотнях книг Excel - PullRequest
2 голосов
/ 05 июля 2011

У меня около 500 карточек.Каждая временная карта - это отдельный файл (книга .xls).Мне нужно всего ячейку K5 ​​из всех этих книг.Это происходит один раз (каждый квартал) - мне не нужно обновлять результат, если меняется какая-либо из этих 500+ временных карт.

Было бы замечательно, если бы была функция, которая принимала два параметра -1) название каталога, содержащего файлы Excel;2) конкретная ячейка, которую вы хотите получить.

После 3,5 часов поиска форумы Excel не помогли.Должно быть, я использую плохие ключевые слова, так как не могу поверить, что в Excel нет такой базовой функциональности.(Я нашел кое-что, если бы у меня было несколько рабочих листов в одной рабочей книге - мы не смогли бы хранить все эти временные карты в одном файле, и просмотр и открытие всех рабочих книг одновременно было бы очень утомительным - 500+ двойной щелчок.)

Спасибо.

(Windows XP SP3; Microsoft Office Excel 2003)

1 Ответ

1 голос
/ 05 июля 2011

Это некоторый код, который будет запрашивать выбор папки, а затем циклически перебирать все файлы в этой папке для имени листа [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
...