![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.02.2010
Сообщений: 12
|
![]()
Добрый день.
Есть проблема следующего вида - у меня есть 2 прайс листа (один мой другой поставщика), в каждом из прайсов есть колонки "артикул" и "наличие". Нужно что бы по артикулу из моего прайса делался поиск в прайсе поставщика. Если в прайсе поставщика есть такой артикул, то проверяется наличие товара. Если товар есть хоть на одном из складов, то в моём прайсе в ячейке этого товара ставится пометка "наличие", если товара нету, то ставится пометка "заказ". Прайсы формате 2007 Exel. Сам уже лет 5 на VB не писал - не помню уже ничего. Буду благодарен, как и за готовые решения, так и за советы по решению данной проблемы. Заранее спасибо. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 13.01.2010
Сообщений: 410
|
![]()
не нашел ни на одном листе колонок "наличие".
счетз(смещ(индекс(поискпоз()))) формулами так наверно можно) Последний раз редактировалось Dophin; 16.02.2010 в 15:59. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 16.02.2010
Сообщений: 12
|
![]()
В листе "мой прайс" это столбец T, а с листом "прайс поставщика" я немного ошибся... Там нет такого столбца, там наличием являются столбцы C, D, E, F и G
Последний раз редактировалось Nekota; 16.02.2010 в 16:16. |
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 29.10.2008
Сообщений: 294
|
![]() Цитата:
То, что вы просите сделать не сложно. Однако, это конечно не мое дело, прежде чем это делать, Вам следует привести Ваш прайс в порядок ![]() Например столбцы B и C начиная со строки 5255, ячейка D5263, да и еще много чего непонятного. Последний раз редактировалось Maxx; 16.02.2010 в 16:10. |
|
![]() |
![]() |
![]() |
#5 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Кривой у Вас прайс какой-то...
До 5254-й строки артикулы находятся в столбце С, а ниже - уже в столбце В. Макросу это вряд ли понравится... Вот Вам готовый макрос: Код:
PS: Все артикулы предварительно я поместил в 3-й столбец В строке состояния Excel отображается ход обработки. См. пример в файле: (добавлено) В макросе, который в примере файла, небольшая ошибка - не заметил, что в файле поставщика 5 складов, а не 4. Замените в строке x = ДиапазонПоиска.Find(Артикул).Next.N ext.Resize(, 4).Find("*").Address 4 на 5
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 16.02.2010 в 16:13. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 16.02.2010
Сообщений: 12
|
![]()
Я делаю поиск по артикулу:
Код:
1.) Строка Код:
2.) Итогом данного действа является, то что я нахожу строку данного артикула в "прайсе поставщика". Как сделать чтобы делалась проверка на наличие наличия товара (простите за тавтологию) только в найденой строке. учитывая что поиск делался по А10, то пишем вT10 (там наличие в моём прайсе) либо nal (если есть), либо zak (если нет)... Вот как-то так... Последний раз редактировалось Nekota; 16.02.2010 в 16:15. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 16.02.2010
Сообщений: 12
|
![]()
EducatedFool, кривой, а делать приходится в нём=( тока в С находится наш внутренний артикул=) а артикул по которому надо искать находится в А... и забит он только до 2166 и то не везде... За пример спасибо сейчас попробую.
Maxx, прошу прощения - ошибся... |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 29.10.2008
Сообщений: 294
|
![]()
To EducatedFool:
не первый раз вижу у Вас такую конструкцию x = ДиапазонПоиска.Find(Артикул).Next.N ext.Resize(, 4).Find("*").Address Можно в двух словах пояснить, как это работает? |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 16.02.2010
Сообщений: 12
|
![]()
EducatedFool, Спасибо большое=) Всё шикарно работает.
есть 2 вопроса: 1.) Можно ли сделать так чтобы он строчки в которых артикула нету пропускал? 2.) Напишите пожалуйста что что значит в скрипте=) очень уж интересно=) По всей видимости придётся теперь частенько писать скрипты, а постоянно просить на форуме не хотелось бы... |
![]() |
![]() |
![]() |
#10 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Цитата:
![]() Единственное, что, на мой взгляд, нуждается в комментариях, так это функция Код:
Диапазон для поиска - это sh2.UsedRange.Columns(1) То есть первый столбец ИСПОЛЬЗУЕМОЙ области листа sh2 = Sheets("Прайс поставщика") В данном примере, это ячейки a4:a13309 листа Прайс поставщика Что делает функция? Она пытается выполнить последовательность действий по поиску, после чего проверяет, вызвали ли эти действия ошибку. Если в ходе поиска произошла ошибка (любая) - Err <> 0 - артикул не найден, и функция возвращает FALSE Если ошибок не возникло, то возвращается TRUE (артикул найден) Как производится поиск: В диапазоне a4:a13309 ищется ячейка, содержащая артикул ДиапазонПоиска.Find(Артикул) от этой найденной ячейки отступаем вправо на 2 ячейки .Next.Next расширяем выделение на 5 ячеек .Resize(, 5) и в этих ячейках (на пересечении строки с найденным артикулом и 5 столбцов-складов) ищем что-нибудь (любой символ) .Find("*") Если все эти действия отработали без ошибок - значит, товар найден в прайсе, и присутствует хотя бы на одном из складов. |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Замена листа с сохранением его имени на другом листе | akd2009 | Microsoft Office Excel | 2 | 03.02.2010 15:52 |
Разворачивание/сворачивание данных на защищенном листе | Wespe | Microsoft Office Excel | 12 | 02.02.2010 12:11 |
Перенос данных из строк в массив на другом листе | akd2009 | Microsoft Office Excel | 2 | 15.12.2009 15:58 |
Помогите пожалуйста с решением поставленной задачи (Выборка товара из прайс-листа) | DimonPS | Microsoft Office Excel | 4 | 12.11.2009 10:51 |
Фильтрация данных на втором листе по данным на первом | ppl | Microsoft Office Excel | 3 | 13.08.2008 14:07 |