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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2013, 12:06   #31
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Мой быстрее за счёт того, что анализируются не ячейки, а данные ячеек в массиве.
Ну и например вместо
Код:
    Do While .Cells(r, 1) <> ""
      d(.Cells(r, 1) & ...
где два раза обращаемся к ячейке Cells(r, 1)
просто перебор всего массива, размер которого определён уже один раз ранее.
Если данных мало - то разница незаметна. А на 27000 строк уже должно чувствоваться.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.08.2013, 12:51   #32
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Виктор, это бывает очень полезно.
да, я это уже понял, посмотрел в отладочном режиме.
Отличная штука. Я обычно пользовался всплывающими значениями, в желтом поле.
Цитата:
Виктор,
век живи...
что я и делаю...в свой почти век
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 30.08.2013, 13:17   #33
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Прошу помощи.
Вложения
Тип файла: rar переброс.rar (13.8 Кб, 17 просмотров)
cherepushka вне форума Ответить с цитированием
Старый 30.08.2013, 14:04   #34
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А вот тут уже вернулись к словарю
Сделал чтоб суммировалось, хотя по факту повторов нет. Но по сути дела при повторе ведь нужно суммировать, так ведь?
Код:

Option Explicit

Sub tt()
    Dim a(), i&, ii&, sh As Worksheet

    a = [a3].CurrentRegion.Value    'любая ячейка непрервыной области

    With CreateObject("Scripting.Dictionary")

        For i = 1 To UBound(a)
            For ii = 2 To UBound(a, 2) Step 2    '
                .Item(a(i, ii)) = .Item(a(i, ii)) + a(i, ii + 1)
            Next
        Next

        Set sh = Sheets.Add
        sh.[a1].Resize(.Count, 1) = Application.Transpose(.keys)
        sh.[b1].Resize(.Count, 1) = Application.Transpose(.items)
        
    End With
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2013, 14:36   #35
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Спасибо, большое. Тут получается простыми массивами не обойтись, будет больше кода?
cherepushka вне форума Ответить с цитированием
Старый 30.08.2013, 14:38   #36
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну можно и простым, но проще словарём. И думаю правильнее - при повторе (а вдруг?)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2013, 14:58   #37
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Словарь до меня не доходит, что-то. С массивами вроде разобрался. Спасибо.
cherepushka вне форума Ответить с цитированием
Старый 30.08.2013, 16:15   #38
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Там просто.
Вот например "перевод" этой строки:

Код:
.Item(a(i, ii)) = .Item(a(i, ii)) + a(i, ii + 1)
Это значит - к item'у ключа a(i, ii) (что есть название товара) прибавляем значение массива a(i, ii + 1). Т.е. то число, что правее названия.
Если такого ключа/item'а в словаре ещё нет - то они добавятся. Если есть - к уже существующему item добавится следующее слагаемое.
В итоге имеем словарь из ключей и item'ов, что в данном случае можно представить как два связанных столбца. Так их рядом и выгружаем.
Хотя это расположение не регламентировано, и правильнее было бы выгрузить ключи, и рядом (затем или сразу) к каждому ключу его item. Но лениво писать

Вот кстати вчерашний код на пяти словарях - думаю вполне понятно и видны преимущества применения. Там есть файл с кодом - с виду сложная задача решается очень просто.
http://www.planetaexcel.ru/forum/ind...ID=1&TID=50800

Только там в одном из словарей собирается не сумма, а строка. В остальных просто хранятся пары ключ-значение, которые сравниваются и изменяются по ходу работы.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элемент массива с максимальным кол-вом чётных цифр. Faxford Помощь студентам 2 20.06.2011 19:19
Создание отчёта с определённым кол-вом полей gamaiunov_alex Microsoft Office Access 2 20.09.2010 21:13
Найти слова с четным кол-вом символов. Си. Terror Общие вопросы C/C++ 2 28.04.2010 16:50
Помогите найти строку с наибольшим кол-вом отриц. эл-ов Danil21 Общие вопросы C/C++ 1 21.06.2009 11:54
Как работать с очень большим кол-вом чисел?? Umnik1 Общие вопросы Delphi 16 25.11.2008 19:22