Страницы: Пред. 1 2
RSS
Макрос (замена функции суммеслимн)
 
Тогда единственный вариант - подключаться к компу через AeroAdmin или TeamViewer 11 смотреть в натуре.
Имхо, конечно.
...Если скорость инета позволяет
Изменено: Михаил С. - 04.06.2017 21:43:40
 
Михаил С., отправил координаты в личку.
 
Счас новая версия загрузится...
 
Цитата
Михаил С. написал:
или TeamViewer 11
- почему именно 11? Я недавно восьмой обходился (ну что скачал по-быстрому).
 
Цитата
Hugo написал:
почему именно 11? Я недавно восьмой обходился
У меня недавно потребовало установить 12 версию, так как у собеседника была такая )
 
Все у вас работает, только медленно.
Счас запустил - ждите
 
У вас 781168 строк, а счас  273710 -я
 
Ну все, закончил, проверяйте результаты.
Что-то уж больно медленно работает.
 
Михаил С., Большое спасибо. Вы мне очень помогли.
 
Ну, всю работу сделал Игорь Hugo,
 
Hugo, Игорь - большое спасибо! Ваш макрос чудо =)
 
ternovsky, я бы вам советовал использовать самый последний макрос Hugo, там, в статус баре будет видно, что макрос работает.
 
Там в файле нет пересчитывающихся формул? Может при выгрузке тормозить.
Но на процесс работы влиять не должно, там всё в памяти происходит.
Изменено: Hugo - 04.06.2017 23:03:35
 
Сами словари заполняются неприлично долго. Дальше уже нормально.
 
ternovsky, если отправите мне эти два листа на почту (в профиле, через личку не получится), я попробую ускорить работу макроса.
Более 20 мин - это не нормально, даже для 1 000 000 строк. Должно быть 30-40 сек, не более.
 
подскажите, как в данном случае заменить функцию "СУММЕСЛИМН" макросом
на листе "база" хранятся данные
в лист "отчет" вставляется сумма литров в зависимости от даты
Изменено: Алексей - 16.04.2021 15:47:14
 
Код
Sub ReplaceSumIf()
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    ReadDic dic
    PrintDic dic
End Sub

Sub ReadDic(dic As Object)
    With Sheets("база")
        Dim y As Long
        Dim a As Variant
        y = .Cells(.Rows.Count, 1).End(xlUp).Row
        If y = 1 Then y = 2
        a = .Range(.Cells(1, 1), .Cells(y, 3))
    End With
    For y = 2 To UBound(a, 1)
        dic.Item(a(y, 1)) = dic.Item(a(y, 1)) + a(y, 3)
    Next
End Sub

Sub PrintDic(dic As Object)
    With Sheets("отчет")
        .Cells(3, 1).Resize(dic.Count, 1) = Application.Transpose(dic.Keys())
        .Cells(3, 4).Resize(dic.Count, 1) = Application.Transpose(dic.Items())
    End With
End Sub
Поднимем некропостинг с колен )
 
спасибо
Страницы: Пред. 1 2
Наверх