Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Объединение, сравнение таблиц в Excel  (Прочитано 20480 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Alexey_R
Гость
« : 20-08-2009 06:21 » 

Уважаемые знатоки, пожалуйста, помогите решить следующий вопрос. Самостоятельно решить пока, к сожалению, не получается.

В книге 1й лист - общий заказ, остальные листы - заказы по цехам. Необходимо составить общую заявку из заявок цехов.
1й столбец - наименование, 2й - кол-во и 3й - единицы измерения.
Наименования разбиты на группы. Товары с одинаковыми наименованиями суммируются.
Количество строк в самом заказе и группе варьируется.
Скрины книги прилагаются. Необходимо, чтобы работало в Excel 2003.
Код:
Sub УникЗнач()
Const result_sheet = "Сводная"
Dim ws As Worksheet
 
With Sheets(result_sheet)
.Cells.ClearContents
.Range("A1:A2") = "Отчёт"               'для корректной работы .end(xldown)
For Each ws In Worksheets
    If ws.Name <> result_sheet Then
                                        'если первая ячейка листа не пустая, копируем текущую
                                        'область в первую свободную ячейку листа результата
        If ws.Range("A1") <> "" Then _
            ws.Range("A1").CurrentRegion.Copy .Range("A1").End(xlDown).Offset(1, 0)
    End If
Next
.Rows(1).Delete                         'удаляем одну строку заголовка (одна нужна для работы фильтра)
                                        'фильтруем уникальные записи в соседний столбец
.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("B1"), Unique:=True

'Здесь как-то должны суммироваться значения в столбце кол-во и, если возможно, переноситься ед. измерения

.Columns("A:A").Delete                  'удаляем исходные данные
.Rows(1).Delete                         'удаляем заголовок
 
End With
End Sub
Макрос не совсем корректно работает, если есть пустые строки внутри таблицы. И, главное, не реализовано суммирование заказов.
Как вариант суммировать можно если растянуть на столбец Кол-во такую конструкцию:
ЕСЛИ(ЕНД(ВПР(A3;'Цех1'!A1:B17;2;0));0;ВПР(A3;'Цех1'!A1:B17;2;0))+ЕСЛИ(ЕНД(ВПР(A3;'Цех2'!A1:B17;2;0));0;ВПР(A3;'Цех2'!A1:B17;2;0))+...+ЕСЛИ(ЕНД(ВПР(A3;'Цех7'!A1:B17;2;0));0;ВПР(A3;'Цех7'!A1:B17;2;0))

С VB знаком 5 день. Уважительно прошу приводить примеры кода, т.к. ответы вида "попробуй применить такой-то метод" принесут, пока, мало пользы.

Спасибо за понимание.

p.s. Картинки как вложения не присоединились с компьютера. Только так.

Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #1 : 20-08-2009 07:37 » 

Сколько позиций максимально?
Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #2 : 20-08-2009 07:55 » 

Есть несколько путей решения и для оптимизации хочется знать приблизительное количество.

2й вопрос:  Нужно ли сохранять названия групп (Трубы, Химия) и вести позиции упорядоченно в их разрезе?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 20-08-2009 08:32 » 

цикл по листам подразделений
цикл по строкам листа подразделения
если в строке Название группы то след строка
если не существует в сводном листе ЗАКАЗА, то вставить новую строку со значениями ЗАКАЗА
иначе просуммировать


Где-то так

Кроме того, чтоб уменьшить количество ошибок ввода и для унификации ГРУПП и ЗАКАЗОВ, необходимо создать справочники ГРУПП и ЗАКАЗОВ

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Alexey_R
Гость
« Ответ #4 : 20-08-2009 08:37 » 

1.Максимум в заказе от цеха - до 100 позиций (на практике размеры заказа не превышали 40-50 наименований), в группе максимум - до 30 наименований. Ввод планирую организовать из списка, чтобы меньше ошибок могли допустить.

2. Названия групп нужно сохранять. Желательно сортировать по алфавиту наименования в группах. И по возможности, чтобы единицы измерения (столбец С) подставлялись автоматом.

Реализовать можно либо в одной книге, как я пытаюсь сделать, либо генерировать новую книгу на основе книг от каждого цеха (все будет в 1 папке, 1 док - 1 цех). Как Вам будет легче.

Хотелось бы написать рабочий макрос, а в дальнейшем уже доработать его.
Спасибо, что так профессионально подходите к вопросу.

Sla
Спасибо. В теории я знаю как написать, но вот код, пока, не умею писать. Могу его из готовых решений похожих сделать.
Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #5 : 20-08-2009 08:41 » 

Думается мне, что лучше бы это организовать на Access.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 20-08-2009 08:43 » 

Alexey_R, с чего начнем? Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Alexey_R
Гость
« Ответ #7 : 20-08-2009 09:44 » 

Naghual
Предполагаю, что да. Но нужно только в Excel.

Sla
Попробуем мой вариант доделать? Только конструкция(см. выше) =ЕСЛИ(..)... не вставляется в формулы в столбец B, тк VB русские буквы в гречку превращает.
Твой вариант "прямее" и логичнее.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 20-08-2009 10:02 » 

1. Получить список листов
2. иметь список групп

а дальше само пойдет как по маслу...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Alexey_R
Гость
« Ответ #9 : 20-08-2009 10:21 » new

Всего будет 5 групп. Скажем Задвижки, Трубы, Детали трубопроводов, Резервуарное оборудование, Химия
Цехов всего 7: Цех1, Цех2,...,Цех7.
Записан
Naghual
Модератор

ua
Offline Offline
Пол: Мужской
ОПТИМИСТ


WWW
« Ответ #10 : 20-08-2009 11:45 » 

Но нужно только в Excel.

Почему?
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 20-08-2009 11:47 » 

я тут сделал за тебя шаблон Улыбаюсь
Давай на нем тренироваться


* example.xls (41.5 Кб - загружено 1149 раз.)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Alexey_R
Гость
« Ответ #12 : 20-08-2009 12:47 » 

Naghual
Большинство тех, кто будет заявки составлять либо не слышали об Access, либо не умеют им пользоваться. Я тоже в нем не очень силен.

Sla
Спасибо.
Вставил данные. Сделал наименования из списков. Добавил мой макрос, но он не работает из-за пустых строк.

* example.xls (67 Кб - загружено 1533 раз.)
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 20-08-2009 13:30 » 

Код:
For Each ws In Worksheets                      'Организовали цикл по листам
    If ws.Name <> result_sheet Then        'Логично пропустить Содную таблицу
        LastCell = ws.Range("A65536").End(xlUp).Address 'находим последнюю не пустую ячейку

'Действуем дальше по алгоритму


    End If
Next
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #14 : 20-08-2009 17:54 » 

а если использовать сводную таблицу?
Записан

I Have Nine Lives You Have One Only
THINK!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines