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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2013, 17:11   #1
KaSS
Пользователь
 
Аватар для KaSS
 
Регистрация: 30.07.2013
Сообщений: 46
Вопрос Работа с большим кол-вом строк, словари, массивы, коллекции

Здравствуйте. Если вам не трудно, не могли бы вы мне помочь. Мне нужно из одного документа, содержащего для каждого типа документа приоритет расставить приоритеты для имеющегося у меня списка документов. Список документов большой - 27 тыс строк, может быть и больше.
Я выкладываю простой пример и как это осуществляется сейчас, хотелось бы узнать как можно сделать тоже, но быстрее (у меня это занимает минуту для оригинального файла) каким-либо другим способом через словари или коллекции, может ещё как то

Книга1.rar
perseverance overcomes all things
KaSS вне форума Ответить с цитированием
Старый 28.08.2013, 18:10   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub SetPriority()
  Dim d, r As Long, a(), t As Single
  Set d = CreateObject("scripting.dictionary"):  t = Timer
  With Worksheets("Приоритет")
    r = 1
    Do While .Cells(r, 1) <> ""
      d(.Cells(r, 1) & .Cells(r, 2)) = .Cells(r, 3):  r = r + 1
    Loop
  End With
  With Worksheets("Документы")
    r = 2: ReDim a(1 To .[a1].CurrentRegion.Rows.Count, 1 To 1): a(1, 1) = "Приоритет"
    Do While .Cells(r, 1) <> ""
      a(r, 1) = d(.Cells(r, 2) & .Cells(r, 3)):  r = r + 1
    Loop
    .Cells(1, 4).Resize(.[a1].CurrentRegion.Rows.Count, 1) = a
  End With
  MsgBox Timer - t & " сек."
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 28.08.2013 в 18:36.
IgorGO вне форума Ответить с цитированием
Старый 28.08.2013, 20:09   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

А как же "словари, массивы"?
Код:
Sub SetPriorityH()
    Dim t As Single: t = Timer
    Dim i&, a()

    With CreateObject("scripting.dictionary")

        a = Worksheets("Приоритет").[a1].CurrentRegion.Value
        For i = 2 To UBound(a): .Item(a(i, 1) & "|" & a(i, 2)) = a(i, 3): Next

        a = Worksheets("Документы").[a1].CurrentRegion.Value
        For i = 2 To UBound(a): a(i, 1) = .Item(a(i, 2) & "|" & a(i, 3)): Next
        a(1, 1) = "Приоритет"

        Worksheets("Документы").Cells(1, 4).Resize(UBound(a), 1) = a
    End With

    MsgBox Timer - t & " сек."
End Sub
Хотя их там правда есть как и у меня - один
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 21:44   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А как же "словари, массивы"?
Игорь, так ты же всех и научил, что макросы надо писать на массивах и словарях )
Сколько твоих сообщений не читаю, - ты везде об этом пишешь. А теперь удивляешься, что люди перенимают твой опыт))

PS: Ко мне уже люди обращаются с заказами, изначально заявляя, что макрос должен быть обязательно с использованием массивов и словарей
(я таких сразу к тебе отправляю, - говорю, что такие макросы ты лучше всех пишешь)))

PPS: Я словари (dictionary) вообще в макросах не использую.
За последние 2 года, использовал их ровно 2 раза. Хотя макросов за это время написал .... чуть больше чем дофига)
EducatedFool вне форума Ответить с цитированием
Старый 28.08.2013, 21:59   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что-то ко мне мало приходят...
Ну коллекции побыстрее работают - но как-то функционала мало, да и ошибки обрабатывать душа не лежит
А что используешь вместо словаря - неужели цикл в цикле по массиву? Неудобно ведь...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 22:05   #6
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Игорь, скажите пожалуйста чем отличается массив от словаря? Словарь и ассоциативный массив это не одно и тоже?
cherepushka вне форума Ответить с цитированием
Старый 28.08.2013, 22:06   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что такое ассоциативный массив? Я правда не знаю
Нужно погуглить...
Погуглил - это и есть что-то вроде словаря.
А простой массив - это массив без никаких ассоциаций
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 22:17   #8
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

В PHP ассоциативные массивы использовал, поэтому сразу не написал, извиняйте, вот теперь Excel нужен. Получается словари и коллекции это одно и тоже, разница лишь в количестве методов и свойств.
cherepushka вне форума Ответить с цитированием
Старый 28.08.2013, 22:21   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Коллекции чуть другое.
Но суть похожа - уникальный ключ, к нему в паре что-то.
В словаре парой может быть почти что угодно (число, строка, массив, словарь, коллекция, объект). Как в коллекции - не знаю, не применял, гуглите.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.08.2013, 22:28   #10
cherepushka
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 81
По умолчанию

Спасибо за ответ.
Если у меня одна строка в четыре столбца - к примеру
1столбец-футболка 2столбец-55 3столбец-45 4столбец-77 и нужно разбить на три строчки в два столбца
футболка 55
футболка 45
футболка 77
Здесь словари или массивами можно обойтись?
cherepushka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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