Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 20:00   #11
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Спасибо Уважаемый Hugo121, за полезные советы , но я не говорил, Что предложенный метод был ненужным и бесполезным, совсем наоборот. просто я подумал что он не до конца решал мою проблему, но автор предложения хорошо объяснил хорошие вещи . И ваши советы пошли на пользу. Спасибп вам обоим.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
- тут уже придётся в ячейки лезть, что неускоряется.
Если примечаний мало - можно пару раз и слазить, если так под 60% - то уже мало смысла закладываться в словари/массивы...
И хорошо что об этом сказали сейчас, а не потом, когда кто-то уже поработал над ненужным кодом.
Спасибо Уважаемый Hugo121, за полезные советы , но я не говорил, Что предложенный метод был ненужным и бесполезным, совсем наоборот. просто я подумал что он не до конца решал мою проблему, но автор предложения хорошо объяснил хорошие вещи . И ваши советы пошли на пользу. Спасибп вам обоим.
roborrr вне форума Ответить с цитированием
Старый 15.12.2017, 06:00   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Один из множества вариантов решения с использованием массивов и словаря:
Код:
Private Sub CommandButton1_Click()
    Dim i As Long, q As String, a(), b(), z: Application.ScreenUpdating = False
    Range("D2:D" & Rows.Count).ClearContents
    Set z = CreateObject("Scripting.Dictionary")
    a = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    ReDim b(1 To UBound(a, 1), 1 To 1)
    For i = 1 To UBound(a, 1)
        q = a(i, 1) & a(i, 2): z.Item(q) = z.Item(q) + a(i, 3)
    Next
    For i = 1 To UBound(a, 1): b(i, 1) = z.Item(a(i, 1) & a(i, 2)): Next
    [D2].Resize(UBound(b, 1)).Value = b
End Sub
Пример во вложении. Выигрыш по времени весьма ощутим.
Вложения
Тип файла: rar prodaji_2.rar (1.71 Мб, 18 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 15.12.2017, 18:43   #13
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Один из множества вариантов решения с использованием массивов и словаря:
Код:
Private Sub CommandButton1_Click()
    Dim i As Long, q As String, a(), b(), z: Application.ScreenUpdating = False
    Range("D2:D" & Rows.Count).ClearContents
    Set z = CreateObject("Scripting.Dictionary")
    a = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    ReDim b(1 To UBound(a, 1), 1 To 1)
    For i = 1 To UBound(a, 1)
        q = a(i, 1) & a(i, 2): z.Item(q) = z.Item(q) + a(i, 3)
    Next
    For i = 1 To UBound(a, 1): b(i, 1) = z.Item(a(i, 1) & a(i, 2)): Next
    [D2].Resize(UBound(b, 1)).Value = b
End Sub
Пример во вложении. Выигрыш по времени весьма ощутим.
Спасово огромное уважаемый SAS888. это то что я искал. Работает мгновенно. библиотеки для меня не совсем привычная штука. Более того, я об этом первый раз слышал. Вы не могли, если можно, написать ваш код с комментариями? Мне 100 раз легче будет разобраться что кчему .
roborrr вне форума Ответить с цитированием
Старый 15.12.2017, 20:04   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Я об этом и говорил. Но если Вам нужно ещё много писать комментариев в ячейку - то это уже через массив не сделать, придётся лезть в каждую ячейку индивидуально, что долго.
Но правда хоть значения ячеек и обработку данных примечания можно делать массивами/словарями.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 15.12.2017, 21:02   #15
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Я об этом и говорил. Но если Вам нужно ещё много писать комментариев в ячейку - то это уже через массив не сделать, придётся лезть в каждую ячейку индивидуально, что долго.
Но правда хоть значения ячеек и обработку данных примечания можно делать массивами/словарями.
Я понял, спасибо. Хорошая штука эти библиотеки, жаль за бесцельно прожитые годы без них.
roborrr вне форума Ответить с цитированием
Старый 15.12.2017, 21:58   #16
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Построил сводную таблицу на отдельном листе, использовал функцию
Код:
=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ("сумма";Лист1!$A$3;"Склад";A2;"Клиент ";B2)
Посчиталось за несколько сек. Можно макросом то же проделать, заменить на значения и удалить лист со сводной.
Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy
Видно, это хороший метод для ускорения вычислений без макросов. Но я не понял как построить сводную таблицу, и где записать ваш код "=ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ.. .".
Уважаемый "Казанский", объясните, пожалуйста подробно как это сделать, или же, если не трудно, продемонстрируйте на моем примере как это сделали вы и выложите файл пожалуйста.
roborrr вне форума Ответить с цитированием
Старый 15.12.2017, 23:12   #17
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от roborrr Посмотреть сообщение
продемонстрируйте на моем примере как это сделали вы и выложите файл пожалуйста
Так вот же ссылка на файл: https://yadi.sk/d/mDRWvtc73QbyBy
Вы уже 3 раза ее процитировали (#7, #8, #16) - не открывается, что ли?
Наверно, с помощью Power Pivot тоже можно это сделать - я эту надстройку еще не освоил.
Функцию ПОЛУЧИТЬ.ДАННЫЕ.СВОДНОЙ.ТАБЛИЦЫ даже прописывать вручную не надо. Достаточно в любой ячейке набрать = и кликнуть по ячейке сводной таблицы. Excel автоматически вставит функцию с соответствующими аргументами. Останется только заменить фиксированные значения полей "Склад", "Клиент" на ссылки на ячейки.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 16.12.2017, 06:40   #18
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во вложении файл из #12 с подробными комментариями в коде.
Вложения
Тип файла: rar prodaji_2_comments.rar (1.67 Мб, 18 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.12.2017, 15:51   #19
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Так вот же ссылка на файл: https://yadi.sk/d/mDRWvtc73QbyBy
Вы уже 3 раза ее процитировали (#7, #8, #16) - не открывается, что ли?
первый раз я послал пустой архив, вы ответили так:
"Файл, сюда не влез: https://yadi.sk/d/mDRWvtc73QbyBy"
я почему то подумал Что вы предлагаете меня ссылку на скачивания программы создания зип файлов и даже не посмотрел на ссылку ( Здесь хотел вставить смайлик). Извините за недоразумение и спасибо за ответы и за то что не поругали.
roborrr вне форума Ответить с цитированием
Старый 16.12.2017, 16:10   #20
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Во вложении файл из #12 с подробными комментариями в коде.
Спасибо вам за комментарии уважаемый SAS888, и спасибо всем кто ответили и помогли освоить незнакомые для меня очень хорошие приемы для ускорения вычислений.
roborrr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ускорить запрос Kot070 Microsoft Office Access 20 22.06.2016 08:23
помогите ускорить макрос (выборка уникальных по 2-м условиям) kievlyanin Microsoft Office Excel 4 11.12.2014 10:48
как ускорить AlexVI Общие вопросы C/C++ 10 15.07.2014 23:42
Ускорить работу БД SERG1980 БД в Delphi 9 09.11.2010 23:30
Как ускорить макрос в Excel 2003 polomus Microsoft Office Excel 4 04.12.2009 16:25