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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2010, 00:44   #1
cerberochek
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 39
Стрелка Выбор повторяющихся данных в одну ячейку

Здравствуйте Уважаемые!

Вот такой вопрос:

Есть таблица (см. пример) в которой в одном столбце идут фамилии студентов, а во втором предметы, которые они изучают. Фамилии повторяются для каждого предмета, например, Иванов->Математика, Иванов->Физика. Нужно пройти по всему столбцу и сделать чтоб для одной фамилии все предметы выводились в ячейку, т.е. Иванов->Математика;Физика.

Подскажите пожалуйста как написать макрос, реализующий выщепредставленную задачу.
Вложения
Тип файла: rar Пример.rar (3.5 Кб, 11 просмотров)
Идите и делайте, Вы всегда успеете оправдаться!
cerberochek вне форума Ответить с цитированием
Старый 19.05.2010, 10:22   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Здравствуйте.
Посмотрите здесь
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 19.05.2010, 11:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию Пример решения

ну и я добавлю свой вариант...

не в целях посоперничать, просто коллекции для...
Вложения
Тип файла: rar Primer_Macros.rar (13.9 Кб, 30 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2010, 13:06   #4
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну и я добавлю свой вариант...

не в целях посоперничать, просто коллекции для...
Извини, но строчка
Код:
  Dim i, iRow, RowFirst, rowLast, RowItogFirst As Long
должна выглядеть так:
Код:
  Dim i As Long, iRow As Long, RowFirst As Long, rowLast As Long, RowItogFirst As Long
Иначе переменные i, iRow, RowFirst, rowLast будут Variant
(что поделать, это VBA, а не ...)
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 19.05.2010, 16:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Извини, но строчка
да за что ж извиняться то?!
Вы правы! Это 100% так!

Это я просто использовал в качестве основы свой древний макрос, где было написано неверно. (я тогда ещё не знал про этот "прикол" VBA... )

и, самое смешное, что сам обнаружил это, но уже после того как запаковал и выложил файл. Потом поленился переделывать... Ошибки то не будет... Хотя я полностью с Вами согласен, типы переменных надо указывать явно!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.05.2010, 23:59   #6
cerberochek
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 39
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Здравствуйте.
Посмотрите здесь
Конечно хорошая функция, но она просто зависает excel при выборе диапазона ячеек в которых выбирать значения для скрепления.

Спасибо большое Serge_Bliznykov, супер код, мне очень нравится!
Идите и делайте, Вы всегда успеете оправдаться!
cerberochek вне форума Ответить с цитированием
Старый 20.05.2010, 05:43   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

+1. Код от Serge_Bliznykov действительно хорош. Но могу предложить еще один вариант, преимуществом которого считаю:
1. Используется всего 1 цикл.
2. Использование массивов позволяет существенно повысить скорость выполнения процедуры, что при больших объемах данных весьма ощутимо.
3. При использовании словаря, при больших объемах данных, возможна ошибка Excel "Out of memory". Для сравнения, попробуйте, например, выполнить предложенные процедуры 1000 раз в цикле.
Вложения
Тип файла: rar Пример_2.rar (10.2 Кб, 25 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 10:23   #8
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Объясните мне бестолковому, почему все так любят выражение Rows.Count? Вообще-то там лежит число 65536! И когда мы берём диапазон Range([A1],Cells(Rows.Count,N), то работаем, соответственно, с 65536 строками!
И при этом мы хотим, чтобы работало быстро...
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 21.05.2010, 10:46   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Вообще-то там лежит число 65536...
И при этом мы хотим, чтобы работало быстро...
Кто Вам это сказал? Константа Rows.Count хранится в модуле класса (никто строки не считает, поэтому работает быстро) и ее значение зависит от версии Excel.
Именно с выходом в свет Excel 2007 (с большим количеством строк, нежели 2003), во избежании недоразумений, правильно использовать именно Rows.Count.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 21.05.2010 в 10:50.
SAS888 вне форума Ответить с цитированием
Старый 21.05.2010, 11:45   #10
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Кто Вам это сказал? Константа Rows.Count хранится в модуле класса (никто строки не считает, поэтому работает быстро) и ее значение зависит от версии Excel.
Именно с выходом в свет Excel 2007 (с большим количеством строк, нежели 2003), во избежании недоразумений, правильно использовать именно Rows.Count.
ну да, 65536 - это для Excel 2003. Для Excel 2007 там лежит 1048576.
Так на какой объём будет ссылаться следующее выражение: Range([A1],Cells(Rows.Count,N).Value, если мы работаем в Excel 2007?
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выделение на одну ячейку больше! Окоча Юра Microsoft Office Excel 12 27.08.2011 16:31
размер страницы в одну ячейку heyjoe Microsoft Office Excel 3 23.08.2009 19:11
Перегнать данные из столбца в одну ячейку KROZORS Microsoft Office Access 2 17.06.2009 17:58
Вставка в одну ячейку ivkoa Microsoft Office Excel 9 22.08.2008 14:16
SQL-запрос на выбор повторяющихся строк stepchild БД в Delphi 2 07.06.2008 10:52