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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2009, 10:33   #1
sergey_wckd
Пользователь
 
Регистрация: 26.10.2009
Сообщений: 13
Плохо Вопрос по excel/vba

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

ТМЦ Описание ТМЦ В наличии
VO974584 УПЛОТНИТ. КОЛЬЦО КРУГЛОГО СЕЧЕНИЯ 7
VO3793492 КОМПЛЕКТ УПЛОТНЕНИЙ 6
VL836647133 ФИЛЬТР 2
ST0337 КРЕПЕЖНЫЙ ИНСТРУМЕНТ 1
ST0300 ГАЕЧНЫЙ КЛЮЧ 2
ST0295 НАТЯЖНОЕ УСТРОЙСТВО ЦЕПИ 1
ST0295 НАТЯЖНОЕ УСТРОЙСТВО ЦЕПИ 2
ST0290 ДОМКРАТ НА ТЕЛЕЖКЕ 1
ST028801 ГАЕЧНЫЙ КЛЮЧ 7
ST0287 ГАЕЧНЫЙ КЛЮЧ 3
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0192 ГАЕЧНЫЙ КЛЮЧ 2
ST010907 КОМПЛЕКТ ШЛАНГОВ 6

Последний раз редактировалось sergey_wckd; 28.10.2009 в 10:35.
sergey_wckd вне форума Ответить с цитированием
Старый 28.10.2009, 10:45   #2
Volodshan
Форумчанин
 
Регистрация: 20.05.2008
Сообщений: 241
По умолчанию

Цитата:
Сообщение от sergey_wckd Посмотреть сообщение
... чтобы в итоге получился список уникальных позиций и их колличества.
При условии, что из 10 тыс. останется максимум 8 тыс. уникальных, то самый простой способ - сводная таблица.
ps Правда в теме excel/vba...
Volodshan вне форума Ответить с цитированием
Старый 28.10.2009, 11:54   #3
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

выложите, пожалуйста, файл (данные можно сократить)
EugeneS вне форума Ответить с цитированием
Старый 28.10.2009, 16:20   #4
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

см. вложение, так как файла нет, вот пример решения Вашей задачи

Откройте файл, нажмите кнопку "Отобрать"
Вложения
Тип файла: zip Unique_filter_plus_count_deleted_items.zip (8.6 Кб, 15 просмотров)

Последний раз редактировалось EugeneS; 28.10.2009 в 16:31.
EugeneS вне форума Ответить с цитированием
Старый 28.10.2009, 16:33   #5
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от sergey_wckd Посмотреть сообщение
Помогите пожалуйста, неделю мучаюсь ничего не могу придумать.
Есть список из 10 тыс. позиций. Эти позиции повторяются, необходимо
найти повторения и удалить их,а колличества просуммировать, чтобы в итоге получился список уникальных позиций и их колличества.

ТМЦ Описание ТМЦ В наличии
VO974584 УПЛОТНИТ. КОЛЬЦО КРУГЛОГО СЕЧЕНИЯ 7
VO3793492 КОМПЛЕКТ УПЛОТНЕНИЙ 6
VL836647133 ФИЛЬТР 2
ST0337 КРЕПЕЖНЫЙ ИНСТРУМЕНТ 1
ST0300 ГАЕЧНЫЙ КЛЮЧ 2
ST0295 НАТЯЖНОЕ УСТРОЙСТВО ЦЕПИ 1
ST0295 НАТЯЖНОЕ УСТРОЙСТВО ЦЕПИ 2
ST0290 ДОМКРАТ НА ТЕЛЕЖКЕ 1
ST028801 ГАЕЧНЫЙ КЛЮЧ 7
ST0287 ГАЕЧНЫЙ КЛЮЧ 3
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0243 РАБОЧЕЕ ОСВЕЩЕНИЕ 2
ST0192 ГАЕЧНЫЙ КЛЮЧ 2
ST010907 КОМПЛЕКТ ШЛАНГОВ 6
Если эта экселевская таблица и ТМЦ уникально для всех то помести в модуль (или кнопку) сл. код и должно сработать
Код:
dim i as long, dim j as long, k as long
dim sm as double
dim st as string
j=cells(rows.count,"A").end(xlUp).Row
for i=1 then j
 st=range("a" & i)
 for k=i+1 to j
  if range("a" & k)=st then
    range("c" & i)=str(Cdbl(str(range("c" & i)))+Cbdl(str(range("c" & k))))
    j=j-1
    rows(k).delete
    k=k-1
  endif
 next k
next i
Юнлинг вне форума Ответить с цитированием
Старый 02.11.2009, 16:22   #6
sergey_wckd
Пользователь
 
Регистрация: 26.10.2009
Сообщений: 13
По умолчанию

Спасибо большое за ваши подсказки, у меня теперь есть два
списка уникальных позиций и их колличество 6000 поз в каждом.
Необходимо вычеслить разницу между колличеством позиций первого списка и второго, для этого необходимо, чтобы позиции первого и второго
списка были идентичными, но это не так(в первом списке содержится примерно 300 поз которых нет во втором и во втором содержится 100 таких вот позиций - их необходимо исключить и записать куда нибудь отдельно)помогите пож. реализовать эту задачку.
sergey_wckd вне форума Ответить с цитированием
Старый 02.11.2009, 16:38   #7
sergey_wckd
Пользователь
 
Регистрация: 26.10.2009
Сообщений: 13
По умолчанию

выкладываю фрагменты
Вложения
Тип файла: zip 1zip.zip (517.5 Кб, 14 просмотров)
sergey_wckd вне форума Ответить с цитированием
Старый 02.11.2009, 17:06   #8
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от sergey_wckd Посмотреть сообщение
Спасибо большое за ваши подсказки, у меня теперь есть два
списка уникальных позиций и их колличество 6000 поз в каждом.
Необходимо вычеслить разницу между колличеством позиций первого списка и второго, для этого необходимо, чтобы позиции первого и второго
списка были идентичными, но это не так(в первом списке содержится примерно 300 поз которых нет во втором и во втором содержится 100 таких вот позиций - их необходимо исключить и записать куда нибудь отдельно)помогите пож. реализовать эту задачку.
Списки рамещаются в разные книги или в одной книги но на разных листах. Если на разных листах то все очень просто
Код:
dim i as integer, dim j as integer, k as integer, j1 as integer, j2 as integer
dim sm as double
dim st as string
dim sh1 as worksheet, sh2 as worksheet, sh3 as worksheet
set sh1 = ThisWorkbook.Worksheets("Лист1")  ' название первого листа
set sh2 = ThisWorkbook.Worksheets("Лист2") ' название второго листа
set sh3 = ThisWorkbook.Worksheets("Лист3") ' название третьего листа
j=sh1.cells(rows.count,"A").end(xlUp).Row
j1=sh1.cells(rows.count,"A").end(xlUp).Row
j2=sh1.cells(rows.count,"A").end(xlUp).Row
for i=1 to j
 st=sh1.range("a" & i)
 for k=1 to j1
  if sh2.range("a" & k)=st then
    sh1.range("c" & i)=Cdbl(str(sh2.range("c" &i)))-Cbdl(str(sh1.range("c" & k)))
    sh2.range("d" & k)=1
    sh1.range("d" & i)=1
  endif
 next k
next i
for i=1 to j
 if not sh1.range("d" & i)=1 then
   sh3.range("a" & j1+1)=sh1.range("a" & i)
   ... ' то же самое для столбца b и c
   j=j-1
   sh1.rows(i).delete
   i=i-1
 endif
next i
... ' аналогично для второго листа
что же касается разных книг то просто создайте ее и дельше как и в случаев листов

Последний раз редактировалось Юнлинг; 03.11.2009 в 15:52.
Юнлинг вне форума Ответить с цитированием
Старый 03.11.2009, 15:27   #9
sergey_wckd
Пользователь
 
Регистрация: 26.10.2009
Сообщений: 13
По умолчанию

Не работает, возможно, из-за того, в листе 2 перед номером позиций
установлен пробел. в коде помоему ошибка..посмотрите пож-та.спасибо.
Вложения
Тип файла: zip sverka.zip (110.3 Кб, 26 просмотров)
sergey_wckd вне форума Ответить с цитированием
Старый 03.11.2009, 15:50   #10
Юнлинг
Форумчанин
 
Регистрация: 17.10.2008
Сообщений: 239
По умолчанию

Цитата:
Сообщение от sergey_wckd Посмотреть сообщение
Не работает, возможно, из-за того, в листе 2 перед номером позиций
установлен пробел. в коде помоему ошибка..посмотрите пож-та.спасибо.
Исправил ошибку в своем предыдущем посте. вроде работает. (Проверял в пошаговом режиме)
Вложения
Тип файла: zip sverka.zip (121.0 Кб, 21 просмотров)
Юнлинг вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Excel .::pk::. Помощь студентам 2 14.05.2016 09:54
Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian+еще один интересный вопрос Maxximus Microsoft Office Excel 17 04.09.2009 20:03
Как запретить запуск программы на VBA Excel 2003 в Excel 2007 kovalevskivf Microsoft Office Excel 2 15.05.2009 16:47
VBA i Excel corsarlt Microsoft Office Excel 3 03.04.2008 06:13