Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Определение порядкового номера элемента в колекции - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение порядкового номера элемента в колекции (Макросы Sub)
Определение порядкового номера элемента в колекции
Poltava Дата: Суббота, 02.11.2013, 01:05 | Сообщение № 1
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Пока единственным способом который я смог придумать для определения номера элемента в колекции являеться перебор в цыкле всех элементов. Возможно кто то знает более эфективные способы?


Сообщение отредактировал Poltava - Суббота, 02.11.2013, 01:07
 
Ответить
СообщениеПока единственным способом который я смог придумать для определения номера элемента в колекции являеться перебор в цыкле всех элементов. Возможно кто то знает более эфективные способы?

Автор - Poltava
Дата добавления - 02.11.2013 в 01:05
AndreTM Дата: Суббота, 02.11.2013, 01:42 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Насколько я понимаю, суть использования коллекции (в VBA, и не только) в том и состоит, что "индекс" (порядковый номер элемента) не нужен. Это же динамический список, и поэтому сегодня "порядковый номер" может быть одним, а завтра - другим... Для этого и существует .Add Item, ItemKey, [Before|After]. Ведь Item - это не просто переменная, это объект, а ItemKey - как раз и определяет ключ для быстрого доступа к объекту. А ваш "Key" может быть просто свойством этого объекта.
Вы же пытаетесь решать задачу типа "поиск порядкового номера по ключу". Это из серии того, что вы в книге будете определять,что лист с именем "Отчёт 666" - это третья закладка. Что даст это знание? Скорее всего, вы пытаетесь использовать коллекцию в задаче, алгоритм которой предполагает использование других средств...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеНасколько я понимаю, суть использования коллекции (в VBA, и не только) в том и состоит, что "индекс" (порядковый номер элемента) не нужен. Это же динамический список, и поэтому сегодня "порядковый номер" может быть одним, а завтра - другим... Для этого и существует .Add Item, ItemKey, [Before|After]. Ведь Item - это не просто переменная, это объект, а ItemKey - как раз и определяет ключ для быстрого доступа к объекту. А ваш "Key" может быть просто свойством этого объекта.
Вы же пытаетесь решать задачу типа "поиск порядкового номера по ключу". Это из серии того, что вы в книге будете определять,что лист с именем "Отчёт 666" - это третья закладка. Что даст это знание? Скорее всего, вы пытаетесь использовать коллекцию в задаче, алгоритм которой предполагает использование других средств...

Автор - AndreTM
Дата добавления - 02.11.2013 в 01:42
SkyPro Дата: Суббота, 02.11.2013, 04:25 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Poltava, решил-таки дописать класс Нерва?


skypro1111@gmail.com
 
Ответить
СообщениеPoltava, решил-таки дописать класс Нерва?

Автор - SkyPro
Дата добавления - 02.11.2013 в 04:25
Poltava Дата: Суббота, 02.11.2013, 08:33 | Сообщение № 4
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Цитата
Poltava, решил-таки дописать класс Нерва?
Ну по сути не решил а приходиться :)
Цитата
лист с именем "Отчёт 666" - это третья закладка
По сути конечно да но ведь задача может стоять и таким образом.
 
Ответить
Сообщение
Цитата
Poltava, решил-таки дописать класс Нерва?
Ну по сути не решил а приходиться :)
Цитата
лист с именем "Отчёт 666" - это третья закладка
По сути конечно да но ведь задача может стоять и таким образом.

Автор - Poltava
Дата добавления - 02.11.2013 в 08:33
AndreTM Дата: Суббота, 02.11.2013, 08:43 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
По сути конечно да но ведь задача может стоять и таким образом
Пример? И попробуем решить и коллекцией (с правильной реализацией), и, например, массивом...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
По сути конечно да но ведь задача может стоять и таким образом
Пример? И попробуем решить и коллекцией (с правильной реализацией), и, например, массивом...

Автор - AndreTM
Дата добавления - 02.11.2013 в 08:43
Poltava Дата: Понедельник, 11.11.2013, 14:27 | Сообщение № 6
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Извините за долгое отсутствие. Пришлось немного отвлечься от темы. Теперь подробнее.
Попался в руки код в котором параллельно заполняется массив и коллекция и потом в коллекции проверяют наличие элемента после чего перебирается массив в поисках этого элемента. и проводятся определенные манипуляции с найденной строкой массива. Код подразумевает что номер элемента коллекции соответствует номеру строки массива. Отсюдова собственно и растут ноги моего вопроса, так как не хочется каждый раз перебирать массив в поисках номера строки содержащей элемент заранее зная что он совпадает с номером элемента в коллекции.
 
Ответить
СообщениеИзвините за долгое отсутствие. Пришлось немного отвлечься от темы. Теперь подробнее.
Попался в руки код в котором параллельно заполняется массив и коллекция и потом в коллекции проверяют наличие элемента после чего перебирается массив в поисках этого элемента. и проводятся определенные манипуляции с найденной строкой массива. Код подразумевает что номер элемента коллекции соответствует номеру строки массива. Отсюдова собственно и растут ноги моего вопроса, так как не хочется каждый раз перебирать массив в поисках номера строки содержащей элемент заранее зная что он совпадает с номером элемента в коллекции.

Автор - Poltava
Дата добавления - 11.11.2013 в 14:27
Hugo Дата: Понедельник, 11.11.2013, 14:52 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Может там не коллекция, а словарь?
Вот в словаре как раз удобно держать ключ с номером строки массива. И сразу по ключу имеем доступ к данным в массиве.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеМожет там не коллекция, а словарь?
Вот в словаре как раз удобно держать ключ с номером строки массива. И сразу по ключу имеем доступ к данным в массиве.

Автор - Hugo
Дата добавления - 11.11.2013 в 14:52
Poltava Дата: Понедельник, 11.11.2013, 16:22 | Сообщение № 8
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Hugo, К сожалению именно коллекции. Я понимаю что использовать словарь было бы правильнее и эффективнее. Но код не мой, а использованы были именно коллекции. Наверно все же придется переписать на словари потому как кроме перебора ничего в голову так и не пришло.


Сообщение отредактировал Poltava - Понедельник, 11.11.2013, 16:32
 
Ответить
СообщениеHugo, К сожалению именно коллекции. Я понимаю что использовать словарь было бы правильнее и эффективнее. Но код не мой, а использованы были именно коллекции. Наверно все же придется переписать на словари потому как кроме перебора ничего в голову так и не пришло.

Автор - Poltava
Дата добавления - 11.11.2013 в 16:22
nerv Дата: Понедельник, 11.11.2013, 17:52 | Сообщение № 9
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Попался в руки код в котором параллельно заполняется массив и коллекция и потом в коллекции проверяют наличие элемента после чего перебирается массив в поисках этого элемента. и проводятся определенные манипуляции с найденной строкой массива. Код подразумевает что номер элемента коллекции соответствует номеру строки массива. Отсюдова собственно и растут ноги моего вопроса, так как не хочется каждый раз перебирать массив в поисках номера строки содержащей элемент заранее зная что он совпадает с номером элемента в коллекции.

абстрактный конь в вакууме. Где пример, код?

Вот в словаре как раз удобно держать ключ с номером строки массива.

в большинстве случаев без разницы


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Попался в руки код в котором параллельно заполняется массив и коллекция и потом в коллекции проверяют наличие элемента после чего перебирается массив в поисках этого элемента. и проводятся определенные манипуляции с найденной строкой массива. Код подразумевает что номер элемента коллекции соответствует номеру строки массива. Отсюдова собственно и растут ноги моего вопроса, так как не хочется каждый раз перебирать массив в поисках номера строки содержащей элемент заранее зная что он совпадает с номером элемента в коллекции.

абстрактный конь в вакууме. Где пример, код?

Вот в словаре как раз удобно держать ключ с номером строки массива.

в большинстве случаев без разницы

Автор - nerv
Дата добавления - 11.11.2013 в 17:52
Hugo Дата: Понедельник, 11.11.2013, 18:01 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну в общем то можно и без перебора:
[vba]
Код
Sub tt()
     Dim col As New Collection

     col.Add 1, "раз"
     col.Add 2, "два"
     col.Add 3, "три"

     MsgBox col("два")
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу в общем то можно и без перебора:
[vba]
Код
Sub tt()
     Dim col As New Collection

     col.Add 1, "раз"
     col.Add 2, "два"
     col.Add 3, "три"

     MsgBox col("два")
End Sub
[/vba]

Автор - Hugo
Дата добавления - 11.11.2013 в 18:01
Poltava Дата: Понедельник, 11.11.2013, 18:46 | Сообщение № 11
Группа: Друзья
Ранг: Форумчанин
Сообщений: 232
Репутация: 50 ±
Замечаний: 0% ±

Hugo, hands данный способ меня устраивает и в коде фактически ничего менять не нужно спасибо за подсказку, а то сам не дошел. я уже к Collection_ от nerv, прикрутил свойство index вычисляемое через перебор.
 
Ответить
СообщениеHugo, hands данный способ меня устраивает и в коде фактически ничего менять не нужно спасибо за подсказку, а то сам не дошел. я уже к Collection_ от nerv, прикрутил свойство index вычисляемое через перебор.

Автор - Poltava
Дата добавления - 11.11.2013 в 18:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Определение порядкового номера элемента в колекции (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!