Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Нашел проблему, была в коллекции COL
Решилась добавлением строчки:
Код
Set COL = Nothing
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
RAN, Спасибо, проверю, надеюсь сработает
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Приложил 3 файла "как есть" и 3 файла "как надо", проблема в том, что нужно автоматизировать чтобы процесс шел для 10к файлов
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Цитата
а задача какая?
Задача в следующем: Найти дубликаты либо в столбце C, либо D, у каждого дубликата есть своя итоговая сумма, которая отображается в столбце I. Необходимо устранить дубли, а итоговые суммы сложить в одну.
Например: в столбце D 3 дубля с значением 1001, в первой строке столбца i сумма 10, во второй строке 20, в третьей 30.
По итогу должна получится одна строка с общей суммой 10+20+30= 60
После выполнения этих действий удалить лишние столбцы (C, E, F, G, H).
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Цитата
Ігор Гончаренко написал:
а что за задачу вы пытаетесь решить?
Преобразование множества файлов, которые находятся в одной папке благодаря макросу
В примере есть 3 изначальных файла
И 3 файла, какие должны получится после выполнения макроса

Файлов около 10к, уже добавлял функцию, которая удаляет строки, где в столбце D нули, но массив заполняет память, в некоторых файлах дает сбои, по итогу обработает файлов 500 только и виснет из-за недостатка памяти
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Добрый день, возник вопрос с очисткой массива, макрос vba:
Код
Sub Get_All_File_from_Folder()
    Dim sFolder As String, sFiles As String, arr, arr2, arr3, i As Long, n As Long, lr As Long, k As Long, COL As New Collection
    
    Dim wb As Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        Set wb = Application.Workbooks.Open(sFolder & sFiles)
        Erase arr2
        With Sheets(1)
        Columns(6).Delete
        Columns(6).Delete
        Columns(6).Delete
lr = .Cells(Rows.Count, 1).End(xlUp).Row
arr = .Range("A2:F" & lr)
For i = LBound(arr) To UBound(arr)
    On Error Resume Next
    COL.Add arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????", arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????" & "//"
Next i
ReDim arr2(1 To COL.Count, 1 To 6)
For i = 1 To COL.Count
    arr3 = Split(COL(i), "//")
    For n = LBound(arr3) To UBound(arr3)
        arr2(i, n + 1) = arr3(n)
    Next n
    arr2(i, 6) = Application.WorksheetFunction.SumIfs(.Columns(6), _
                 .Columns(1), arr3(0), _
                 .Columns(2), arr3(1), _
                 .Columns(3), arr3(2), _
                 .Columns(4), arr3(3))
Next i
End With
ActiveSheet.UsedRange.Offset(1).Clear
Sheets(1).Range("A2").Resize(UBound(arr2), 6) = arr2
Columns(5).Delete
Columns(3).Delete

        wb.Close True
        sFiles = Dir
    Loop
    Application.ScreenUpdating = True
End Sub


Пытаюсь очистить массив с помощью Erase arr2 - выходит ошибка, если в самом конце перед wb.Close ставить Erase arr2, то он не очищается

Пробовал уже в каждую строку Erase засовывать - либо ошибка, либо вообще все очищается, либо наоборот ничего не меняется

Выкладываю изначальные файлы (3 файла (*-file))
И что должно получится в итоге (3 файла(*-result))
Из строк с одинаковым значение - сделать одну, и сложить сумму с определенного столбца
 
Mershik, Спасибо большое за макрос, немного модернизировал его, теперь он парсит все файлы в папке, удаляет не нужные столбцы, сохраняет итд, но возникла проблема с массивами, при сохранении файлов - вставляются прошлые строки, пример:

Первый файл:
Скрытый текст
2 файл:
Скрытый текст
3 файл:
Скрытый текст
Было бы очень даже здорово, если данные со всех файлов собрались в один большой, но ОбщСум пропадает, и ставит нули
Хотелось бы узнать, как можно избежать копирование данных с прошлых файлов или наоборот, чтобы файлы обьеденялись, но в ОбщСум стояли не нули

3 примера файлов выкладываю также

Макрос:
Код
Sub Get_All_File_from_Folder()
    Dim sFolder As String, sFiles As String, arr, arr2, arr3, i As Long, n As Long, lr As Long, k As Long, col As New Collection
    Dim wb As Workbook
    'диалог запроса выбора папки с файлами
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    'отключаем обновление экрана, чтобы наши действия не мелькали
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        'открываем книгу
        Set wb = Application.Workbooks.Open(sFolder & sFiles)
        'действия с файлом

        With Sheets(1)
        Columns(6).Delete
        Columns(6).Delete
        Columns(6).Delete
lr = .Cells(Rows.Count, 1).End(xlUp).Row
arr = .Range("A2:F" & lr)
For i = LBound(arr) To UBound(arr)
    On Error Resume Next
    col.Add arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????", arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????" & "//"
Next i
ReDim arr2(1 To col.Count, 1 To 6)
For i = 1 To col.Count
    arr3 = Split(col(i), "//")
    For n = LBound(arr3) To UBound(arr3)
        arr2(i, n + 1) = arr3(n)
    Next n
    arr2(i, 6) = Application.WorksheetFunction.SumIfs(.Columns(6), _
                 .Columns(1), arr3(0), _
                 .Columns(2), arr3(1), _
                 .Columns(3), arr3(2), _
                 .Columns(4), arr3(3))
Next i
End With
ActiveSheet.UsedRange.Offset(1).Clear
Sheets(1).Range("A2").Resize(UBound(arr2), 6) = arr2
Columns(5).Delete
Columns(3).Delete

        'Закрываем книгу с сохранением изменений
        wb.Close True 'если поставить False - книга будет закрыта без сохранения
        sFiles = Dir
    Loop
    'возвращаем ранее отключенное обновление экрана
    Application.ScreenUpdating = True
End Sub

Изменено: vikttur - 21.07.2021 23:29:03
Из строк с одинаковым значение - сделать одну, и сложить сумму с определенного столбца
 
Нужно посчитать не сумму всех полей, а на примере первых трёх строк: есть наименование "Ourav", у него есть "груша, яблоко, арбуз", каждое со своей суммой, и нужно сделать из трёх строк одну с общей суммой этих товаров ("наимусл"), и так с каждой
Из строк с одинаковым значение - сделать одну, и сложить сумму с определенного столбца
 
Добрый день, искал в интернете подобное, но всё не то, возможно даже не знаю как правильно формулировать вопрос

Есть папка с файлами excel, ~10.000 файлов, в каждом по 150 строк, в строках повторяются названия - для каждого своя сумма, нужно сделать, чтобы повторений не было и каждую сумму сложить в единую, на словах ничего не понятно, поэтому делаю пример и прикладываю файл с примером (1 лист - исходная база, 2 лист - то, что должно получится)

Исходная база:
ДатаДокДатаСостНаимНаимУслугОбщСумУсл
10.04.202131.12.2019Ourav961874287Груша4626;54
10.04.202131.12.2019Ourav961874287Яблоко102672;68
10.04.202131.12.2019Ourav961874287Арбуз23801;47
10.04.202131.12.2019Bylar710597001Апельсин27191;76
10.04.202131.12.2019Bylar710597001Банан1000
10.04.202131.12.2019Kiandlay374495991Груша200
10.04.202131.12.2019Kiandlay374495991Огурец733;3
10.04.202131.12.2019Kiandlay374495991Помидор170
10.04.202131.12.2019Kiandlay374495991Груша96;7
то, что должно получится:
ДатаДокДатаСостНаимНаимУслугОбщСумУсл
10.04.202131.12.2019Ourav961874287Общее131100;69
10.04.202131.12.2019Bylar710597001Общее28191;76
10.04.202131.12.2019Kiandlay374495991Общее1200
Подскажите, как можно это сделать, может быть с помощью макросов vba, или хотя бы намек, буду очень признателен!
Добавление в существующий макрос - замену значений
 
Спасибо большое, то что нужно!
Добавление в существующий макрос - замену значений
 
Всем привет, есть макрос, который перебирает файлы и удаляет первые 3 строки, а также удаляет второй лист.
Возникла проблема с добавлением функции с заменой символов, в данной ситуации нужно все "," поменять на "."

Сам скрипт:
Код
Sub del30()
Dim objFS, objExcel, objWB, strPath, strExt, strList
strPath = "D:\vyborka\r1\r3\r2"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FolderExists(strPath) Then
    Set objExcel = CreateObject("Excel.Application")
    For Each objItem In objFS.GetFolder(strPath).Files
        strExt = Left(LCase(objFS.GetExtensionName(objItem)), 3)
         If strExt = "xls" Or strExt = "xlsx" Or strExt = "xlsm" Then
            objExcel.Visible = False
            objExcel.DisplayAlerts = False
            Set objWB = objExcel.Workbooks.Open(objItem.Path)
            With objWB
                 .Worksheets(1).Rows("1:3").Delete
                 .Sheets("Условия запроса").Delete
                .Save
                .Close
            End With
            strList = strList & objItem.Name & vbNewLine
         End If
    Next
    objExcel.Quit: Set objExcel = Nothing
    If Len(strList) > 0 Then
        WScript.Echo "Обработанные файлы:" & vbNewLine & strList
    Else
        WScript.Echo "Ни одного подходящего файла не найдено."
    End If
Else
    WScript.Echo "Не найден путь " & UCase(strPath)
End If
Set objFS = Nothing
WScript.Quit 0
End Sub

Находил скрипты, которые работают отдельно, но добавить их в этот существующий - не получалось никак.
Буду благодарен за помощь

Страницы: 1
Наверх