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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2011, 16:11   #1
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию Как добавить элемент в динамический массив?

Не смейтесь, но никак не могу найти в VBA встроенную функцию, добавляющую элемент в конец динамического массива.
(аналог array_push() или Arr[] в PHP или push() в Perl)
также не получается найти встроенную функцию сортировки массивов (аналог sort() в PHP и Perl)

Допустим, я объявляю динамический массив. Его конечный размер заранее неизвестен.
Код:
Dim arr() As String
Redim arr(1)
затем, мне надо в цикле просмотреть все строки одной таблицы ("Лист1"), на каждой итерации просмотреть колонку второй таблицы ("Лист2") и, если интересующие вхождения будут найдены, добавить новые элементы из ячеек "Лист1" в конец массива arr(), а по выходу из цикла, отсортировать этот массив arr() по алфавиту.

Моя конструкция
Код:
arr(UBound(arr) + 1) = tb.Cells(j, "C").Value
не срабатывает, ругается, что "Subscript out of range"

Если не трудно, подскажите, как решаются такие задачи в VBA!
Спасибо!
Depressive вне форума Ответить с цитированием
Старый 21.05.2011, 16:31   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Плохо искали
Код:
 ReDim Preserve arr (UBound(arr) + 1)

 arr (UBound(arr) )=tb.Cells(j, "C").Value
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 21.05.2011, 17:30   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
Не смейтесь, но никак не могу найти в VBA встроенную функцию, добавляющую элемент в конец динамического массива
смеяться тут нечего, но Вы бы порядком удивили публику, если бы нашли такую функцию)))
Doober показал Вам как переопределить размер массива.

можете еще посмотреть в сторону коллекции - это нормальный динамический массив изначально.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.05.2011, 18:12   #4
Depressive
Пользователь
 
Регистрация: 09.05.2011
Сообщений: 22
По умолчанию

Спасибо за ответы!
Честно говоря, несколько ошарашен отсутствие в VBA подобных встроенных функций (push, pop, shift, unshift, sort и т.д.), без них становиться совсем грустно...
Нормального справочника с примерами по VBA тоже не могу найти. Кстати, может подскажите такой?

Как же, все-таки, наиболее быстро и грамотно сортировать массивы строк?
Depressive вне форума Ответить с цитированием
Старый 22.05.2011, 20:05   #5
clever77
Пользователь
 
Регистрация: 13.04.2011
Сообщений: 58
По умолчанию

Цитата:
Сообщение от Depressive Посмотреть сообщение
Спасибо за ответы!
Честно говоря, несколько ошарашен отсутствие в VBA подобных встроенных функций (push, pop, shift, unshift, sort и т.д.), без них становиться совсем грустно...
Нормального справочника с примерами по VBA тоже не могу найти. Кстати, может подскажите такой?

Как же, все-таки, наиболее быстро и грамотно сортировать массивы строк?
Одной нет, есть набор......

Как то так:
1. Исх данные столбец А, сортированные данные столбец С
Формулу поместить в столбце С
=ИНДЕКС($A$2:$A$51;НАИМЕНЬШИЙ(ЕСЛИ( СЧЁТЕСЛИ($C$1:C2;$A$2:$A$51)=0;СТРО КА($A$1:$A$50));1))

2. Или сложнее, если надо с проверкой на ошибки
Исх данные столбец А, сортированные данные столбец D

Формулу поместить в столбце D
=ЕСЛИ(ЕОШ(НАИМЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ( $C$1:C3;$A$2:$A$51)=0;СТРОКА($A$1:$ A$50));1));"";ИНДЕКС($A$2:$A$51;НАИ МЕНЬШИЙ(ЕСЛИ(СЧЁТЕСЛИ($C$1:C3;$A$2: $A$51)=0;СТРОКА($A$1:$A$50));1)))

Вот пример, не я придумал...... И ведь работает.....

3.
http://www.programmersforum.ru/showthread.php?t=147263
Почитай первый пост, может поможет.....
4. где то на просторах Google мне попадался готовый макрос, по поиску и подсчету уникальных имен в списке.... Поищи....
Вложения
Тип файла: rar Unique.rar (7.9 Кб, 44 просмотров)
clever77 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить элемент в двумерный динамический массив? RainCat Помощь студентам 1 13.04.2011 14:03
Добавить элемент в массив увеличив его размерность Yura_n Общие вопросы C/C++ 3 05.12.2009 18:09
Добавить элемент в массив MAKEDON Общие вопросы C/C++ 2 23.03.2009 18:47