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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2015, 14:11   #1
chib_sv
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 65
По умолчанию Данные из справочник при помощи VBA

Добрый день! Есть таблица, которая содержит общую информацию. Лист Поставщик1 и Поставщик2 копируется в табл. Все_поставщики. Необходимо заполнить лист Итоговый. Пробую решить задачу при помощи автофильтра, прописывая их макросом. Но т.к. справочник будет большой и наименование, код товара будет изменяться приходится постоянно менять в макросе. А так же как на листе Итоговый в поле Стоимость сумировалась стоимость по данному коду товара. Подскажите как решить проблему, упростив код. Заранее спасибо!
Вложения
Тип файла: zip поставщик1.zip (16.4 Кб, 9 просмотров)
chib_sv вне форума Ответить с цитированием
Старый 05.02.2015, 14:16   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Расскажите коротенько как именно нужно заполнить - что-то лениво из файла/кода выколупывать логику.
Думаю тут работа для словаря.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.02.2015, 14:54   #3
chib_sv
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 65
По умолчанию

Если коротко, то запускаю макрос и лист Итоговый заполняется, беря данные из листа Все_поставщики. В данном варианте лист Справочник роли не играет, т.к. код товара отдельно прописывается в макросе, это очень не удобно и не прававильно, т.к. наименований товара будет около двухсот (придется каждый раз менять в макросе). Задача в том чтобы при изменении наименований и кода товара не приходилось каждый раз прописывать в макросе, а данные (код и наименование товара) брались из справочника.
chib_sv вне форума Ответить с цитированием
Старый 05.02.2015, 15:41   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Попробуйте стандарно сделать сводную (в поиск "эксель сводная"). Можно её макросом обновить (хотя вручную проще).
Если сводная категорически не подходит - можно сделать макрос на словаре. Только непонятно, на кой там вообще справочник?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2015, 07:16   #5
chib_sv
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 65
По умолчанию

В том то и дело, что сейчас справочник не используется, а макросе (на автофильтре) отдельно прописывается код товара (.AutoFilter Field:=2, Criteria1:="001-1"). Код 001-1 соответствует ячейки B1 листа Спровочника. Вопрос как в макросе, вместо "001-1" прописать ячеку B1 листа Справочник.
chib_sv вне форума Ответить с цитированием
Старый 06.02.2015, 09:59   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Если писать нормальный макрос или использовать сводную - суммы по всем позициям, существующим в исходных данных, подтянутся автоматически. Т.е. справочник нужен только для того, чтоб из общей кучи выбрать только те позиции, которые есть в справочнике (ну или показать, что вот эти есть, а этих нет).
А если нужна сводная по существующим - справочник не нужен.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2015, 10:14   #7
chib_sv
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 65
По умолчанию

Не только чтобы показать из общей кучи только те позиции, которые есть в справочнике, но и скопировать их на лист Итоговый, каждый в соответсвующюю ячейку на листе Итоговый
With Sheets("все_поставщики").Range("b1" )
.AutoFilter
.AutoFilter Field:=2, Criteria1:="001-1" (заместо 001-1, была ячейка Справочник B1)
Sheets("все_поставщики").Range("a2: d1000").Copy
Worksheets("итоговый").Range("A2"). PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
chib_sv вне форума Ответить с цитированием
Старый 06.02.2015, 10:24   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Если делать вот так на фильтре - ну добавьте цикл по справочнику: берёте очередное значение, подставляете в фильтр.
Но я бы делал иначе, не люблю фильтры, неудобно... Но некогда сейчас писать код, да и пока непонятно что именно нужно делать, зачем этот справочик
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 06.02.2015, 10:51   #9
chib_sv
Пользователь
 
Регистрация: 15.06.2010
Сообщений: 65
По умолчанию

Не знаю я как это сделать, по этому и обратился за помощью))
chib_sv вне форума Ответить с цитированием
Старый 06.02.2015, 11:07   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Ну например:
Код:
Sub one()
Dim c As Range

        For Each c In Sheets("справочник").UsedRange.Columns(2).Cells
            With Sheets("все_поставщики").Range("b1")
                .AutoFilter
                .AutoFilter Field:=2, Criteria1:=c
                Sheets("все_поставщики").UsedRange.Offset(1).Copy
                Worksheets("итоговый").Cells(Rows.Count, "A").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                                                                         :=False, Transpose:=False
            End With
        Next

End Sub
Но это не сводная, это просто всё отфильтрованное. Делал максимально используя Ваш код - там что-то лишнее, что-то нужно бы ещё добавить...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 06.02.2015 в 11:10.
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать справочник в Office Visual Basic (VBA) khamal Помощь студентам 1 15.01.2013 21:59
нужен хороший учебник или справочник по VBA callbitz Microsoft Office Access 12 24.02.2012 11:19
vba выводить сообщение при введении в ячейку данные johny_03 Microsoft Office Excel 4 30.12.2011 14:40
Проблема при открытии базы при помощи ADO SlavaSH БД в Delphi 21 30.06.2009 16:51