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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 10:41   #1
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Обработка массива и вывод уникальных наименований клиентов

Помогите начинающему решить проблему!
Как запустить макрос (на листе 1 с выводом результатов на лист 2) с кнопки, находящейся на листе 3?
Суть макроса - из диапазона на листе "Массив" выбрать уникальные наименования клиентов и скопировать их в диапазон на листе выводы по столбцу 1 начиная со строки 2 (как в расширенном фильтре). Макрос запускается с элемента управления "Кнопка" на листе "Кнопка".
Помогите пожалуйста!
Вложения
Тип файла: rar Пример 1.rar (6.0 Кб, 35 просмотров)
Иванов_ДМ вне форума Ответить с цитированием
Старый 22.04.2009, 11:11   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите пример во вложении.
Вложения
Тип файла: rar Пример 1_2.rar (10.3 Кб, 135 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.04.2009, 11:18   #3
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

to SAS888 Огромное спасибо!!!
А еше одна просьба: не могли Вы объяснить на пальцах суть макроса, чтобы я мог его модифицировать при необходимости!
P.S. На пальцах - это для полных чайников.
Иванов_ДМ вне форума Ответить с цитированием
Старый 22.04.2009, 11:42   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Макрос работает так:
Создается массив a значений столбца "A" листа "Массив". Затем, в цикле перебираются все значения массива и заносятся в коллекцию x. Т.к. двух одинаковых членов коллекции быть не может, то мы перехватываем возможную ошибку при добавлении нового члена в коллекцию, и если ошибки нет, то присваиваем текущее значение следующему элементу созданного нами массива b, имеющего ту же размерность, что и массив a. Если же ошибка есть (т.е. такой член коллекции уже существует), то это значение игнорируем (не заносим в массив b). Таким образом, по окончании цикла имеем массив b, содержащий только уникальные значения массива a.
Теперь помещаем значения массива b в предварительно очищенный от данных столбец "A" листа "Выводы".
Данный метод (с применением массивов) использован потому, что гораздо быстрее работать в памяти, чем с ячейками рабочего листа Excel (примерно в 100 раз). Макрос, при работе с ячейками использует всего 2 команды: поместить диапазон данных в массив и обратное действие. При больших объемах данных - такое "ускорение" существенно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 22.04.2009, 11:46   #5
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Спасибо огромное, разобрался!
Иванов_ДМ вне форума Ответить с цитированием
Старый 24.04.2009, 10:09   #6
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию Нюанс

Маленький нюанс (точнее вопрос).
Массив, из которого берутся данные, может быть несплошным, то есть там могут быть пустые ячейки. В этом случае макрос и выводы делает несплошными, то есть считает пустые ячейки как уникальные значения. Как этого избежать?
Помогите, пожалуйста!
Иванов_ДМ вне форума Ответить с цитированием
Старый 24.04.2009, 10:37   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вообще-то, пустая ячейка, это тоже одно из уникальных значений. Поэтому, она может встречаться не более, чем 1 раз.
Если и этого не нужно, то см. пример во вложении.
Вложения
Тип файла: rar Пример 1_3.rar (10.3 Кб, 117 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 24.04.2009, 11:43   #8
Иванов_ДМ
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 96
По умолчанию

Спасибо, теперь все отлично
PS Не ожидал что это так просто изменить
Иванов_ДМ вне форума Ответить с цитированием
Старый 01.02.2010, 13:06   #9
ОlGa
Новичок
Джуниор
 
Регистрация: 26.01.2010
Сообщений: 2
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Вообще-то, пустая ячейка, это тоже одно из уникальных значений. Поэтому, она может встречаться не более, чем 1 раз.
Если и этого не нужно, то см. пример во вложении.

Здравствуйте!
А как сделать так чтоб уникальные значения выводились не в столбик, а в строку?
ОlGa вне форума Ответить с цитированием
Старый 01.02.2010, 16:51   #10
0mega
Форумчанин
 
Регистрация: 12.09.2009
Сообщений: 232
По умолчанию

Цитата:
Сообщение от ОlGa Посмотреть сообщение
Здравствуйте!
А как сделать так чтоб уникальные значения выводились не в столбик, а в строку?
Ответ на этот вопрос Вы найдете здесь

Последний раз редактировалось 0mega; 01.02.2010 в 16:57.
0mega вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка массива макросом Иванов_ДМ Microsoft Office Excel 8 18.04.2009 23:04
обработка массива, с++ lusuj Помощь студентам 2 11.11.2008 19:27
Delphi - обработка двумерного массива dm.os. Помощь студентам 1 30.09.2008 23:32
[Delphi] создание и обработка двумерного массива screep Помощь студентам 5 16.06.2008 19:27
Обработка вещественного массива Painsector Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 10.12.2007 19:48