Страницы: 1
RSS
Поиск данных по всем листам.
 
Здравствуйте. У меня такой вопрос.  
Есть несколько таблиц товаров разных поставщиков с одинаковыми полями, расположенных на разных листах.  
Вид: Артикул/Наименование/Цена и т.д.  
Требуется составить заказ на отдельном листе. Чтобы при вводе номера в поле "Артикул" осуществлялся поиск данных по всем листам, и занесение найденного в остальных поля.    
Можно ли это сделать с помощью функции ВПР()? Если можно, то как задать диапазон листов?  
Или же нужно писать макрос для поиска по всем листам книги?
 
Можно.
 
Вот ссылка  
http://www.planetaexcel.ru/forum.php?thread_id=10343  
(топик третий снизу)
 
{quote}{login=Alexander_V}{date=19.01.2010 11:09}{thema=И снова VLookup рулит очередное спасибо Лузер™}{post}Вот ссылка  
http://www.planetaexcel.ru/forum.php?thread_id=10343  
(топик третий снизу){/post}{/quote}  
 
Посмотрел я файл с примером функции. Получается, в ней нужно описывать каждый лист, где надо искать. (=VlookupNumberX($B12;E$9;0;Таблица1!$A$1:$E$15;Таблица2!$A$1:$E$15;Таблица3!$A$1:$E$15))  
А это очень длинная формула (у меня около 15-ти листов с прайсами товаров).  
Мне надо, наподобие функции ВПР(), но только поиск осуществлять по всем листам.  
В примере (прикрепленный файл), поиск происходит по полю "Артикул" для таблицы "Прайс", а данные отображаются в полях "Наименов","кол-во" и "цена".
 
{quote}{login=}{date=20.01.2010 11:14}{thema=Re: И снова VLookup рулит очередное спасибо Лузер™}{post}{quote}{login=Alexander_V}{date=19.01.2010 11:09}{thema=И снова VLookup рулит очередное спасибо Лузер™}{post}Вот ссылка  
http://www.planetaexcel.ru/forum.php?thread_id=10343  
(топик третий снизу){/post}{/quote}  
 
Посмотрел я файл с примером функции. Получается, в ней нужно описывать каждый лист, где надо искать. (=VlookupNumberX($B12;E$9;0;Таблица1!$A$1:$E$15;Таблица2!$A$1:$E$15;Таблица3!$A$1:$E$15))  
А это очень длинная формула (у меня около 15-ти листов с прайсами товаров).  
Мне надо, наподобие функции ВПР(), но только поиск осуществлять по всем листам.  
В примере (прикрепленный файл), поиск происходит по полю "Артикул" для таблицы "Прайс", а данные отображаются в полях "Наименов","кол-во" и "цена".{/post}{/quote}  
Не поверите - у меня тоже ровно 15 листов с таблицами :),и формула тоже очень длинная получилась(кто если не мы формуле путь к таблицам напишет), но зато работает :)  
Попробую сообразить пользовательскую функцию для поиска по всем листам, но ничего не обещаю .  
PS: Я только учусь.
 
так?
 
{quote}{login=тухачевский}{date=20.01.2010 09:22}{thema=}{post}так?{/post}{/quote}  
 
посмотрел ваш файл  - не совсем понятна формула: =ДВССЫЛ(АДРЕС(raw($A5);СТОЛБЕЦ();1;1;lst($A5))).  
можете расшифровать ее?  
при ее копировании и вставке в мой лист "заказ" появляется ошибка "#ИМЯ?", а в исходнике появляется ошибка "#ЗНАЧ!"  
а в вашем исходнике всё работает.
 
{quote}Не поверите - у меня тоже ровно 15 листов с таблицами :),и формула тоже очень длинная получилась(кто если не мы формуле путь к таблицам напишет), но зато работает :)Попробую сообразить пользовательскую функцию для поиска по всем листам, но ничего не обещаю .{/quote}  
 
эта функция VLookup у меня не хочет работать. может подскажете, как ее прописать в мой файл?
 
{quote}{login=dendy_81}{date=21.01.2010 07:41}{thema=Re: Поиск данных по всем листам.}{post}{quote}{login=тухачевский}{date=20.01.2010 09:22}{thema=}{post}так?{/post}{/quote}  
 
посмотрел ваш файл  - не совсем понятна формула: =ДВССЫЛ(АДРЕС(raw($A5);СТОЛБЕЦ();1;1;lst($A5))).  
можете расшифровать ее?  
при ее копировании и вставке в мой лист "заказ" появляется ошибка "#ИМЯ?", а в исходнике появляется ошибка "#ЗНАЧ!"  
а в вашем исходнике всё работает.{/post}{/quote}  
 
вечером было избыточно  
упростил  
это пользовательская функция    
нужно в вашу книгу скопировать модуль из прикрепленной книги
 
Особо не тестировал времени нет. Если чего пишите.
 
{quote}{login=Alexander_V}{date=21.01.2010 11:28}{thema=Вот мой вариант}{post}Особо не тестировал времени нет. Если чего пишите.{/post}{/quote}  
Моя функция тоже пользовательская так что не забудьте скопировать модуль
 
с учетом решения Alexander_V все короче  
а автора все нет
 
{quote}{login=тухачевский}{date=21.01.2010 10:24}{thema=}{post}с учетом решения Alexander_V все короче  
а автора все нет{/post}{/quote}  
 
класс! формула сокращена до минимума! Спасибо вам за помощь (и Alexander_V тоже). Вставил в свою базу - работает! Только вот функция ищет неполное совпадение по одному или нескольким символам, и отображает первое найденное значение (ввёл "22", а нашла "220156"). А мне надо найти значение по всем символам, по количеству и по их порядковому расположению (по артикулу). Т.е., если я ввел "200543", то и найти должна только значение "200543". Что надо поменять в функции? И как в функции, если при поиске не найдено совпадений, оставить строки пустыми или заполнить пунктирами (вместо нулей)?
 
{quote}{login=The_Prist}{date=22.01.2010 08:32}{thema=}{post}Синтаксис приближен к стандартной ВПР {/post}{/quote}Может тогда поменять местами порядок vCriteria и rTable? И еще добавить псевдо "интервальный просмотр", который будет менять xlWhole/xlPart?
Bite my shiny metal ass!      
 
Я устыдился давать ТЗ и сделал сам, чуть иначе.  
 
Function VLookUpAllSheets(vCriteria As Variant, rTable As Range, lColNum As Long, Optional XlLookAt As String = "xlWhole") As Variant  
'rTable - указывается таблица для поиска значений(как в стандартной ВПР)  
'vCriteria - указывается ссылка на ячейку или текстовое значение для поиска  
'lColNum - указывается номер столбца в таблице rTable, значение из которого необходимо вернуть - может быть ссылкой на столбец - СТОЛБЕЦ()  
'XlLookAt - Optional. Can be one of the following XlLookAt constants: xlWhole or xlPart. Default - "xlWhole"  
Dim rFndRng As Range  
For i = 1 To Worksheets.Count  
 If Sheets(i).Name <> Application.Caller.Parent.Name Then  
   With Sheets(i)  
     Set rFndRng = .Range(rTable.Address).Resize(, 1).Find(vCriteria, , xlValues, IIf(XlLookAt = "xlWhole", xlWhole, xlPart))  
     If Not rFndRng Is Nothing Then  
       VLookUpAllSheets = rFndRng.Offset(, lColNum - 1).Value  
       Exit For  
     End If  
   End With  
 End If  
Next i  
End Function  
 
Справка на англицком, звиняйте - лень.
Bite my shiny metal ass!      
 
{quote}{login=dendy_81}{date=22.01.2010 07:53}{thema=Re: }{post}{quote}{login=тухачевский}{date=21.01.2010 10:24}{thema=}{post}с учетом решения Alexander_V все короче  
а автора все нет{/post}{/quote}  
 
класс! формула сокращена до минимума! Спасибо вам за помощь (и Alexander_V тоже). Вставил в свою базу - работает! Только вот функция ищет неполное совпадение по одному или нескольким символам, и отображает первое найденное значение (ввёл "22", а нашла "220156"). А мне надо найти значение по всем символам, по количеству и по их порядковому расположению (по артикулу). Т.е., если я ввел "200543", то и найти должна только значение "200543". Что надо поменять в функции? И как в функции, если при поиске не найдено совпадений, оставить строки пустыми или заполнить пунктирами (вместо нулей)?{/post}{/quote}  
Моя по полному ищет :) если не находит пишет 0.
 
Внимательно перечитал пост думал нужно что бы "0" писало оказывается не надо :)  
в приложении файл формула возвращает пустое место (визуально).  
PS: Хотя после формул The_Prist-а и Лузер™-а как то даже не удобно свою выкладывать:).
 
По хорошему, если ничего не найдено, то должно возвращаться #Н/Д  
В самый конец вставить:  
If rFndRng Is Nothing Then VLookUpAllSheets = "#N/A"  
End Function  
или в начало  
Dim rFndRng As Range  
VLookUpAllSheets = "#N/A"  
 
А уже юзер проверять должен на ЕНД() или еслиошибка() и подставлять что ему нравится - пробел, пустую строку, 0 и т.п.
Bite my shiny metal ass!      
 
Извиняюсь, что долго не появлялся (нэта не было).  
Спасибо всем участникам за полезную информацию! Особенно The_Prist за полную и содержательную функцию, а Лузеру за её доработку и "#N/A".  
После этой темы у меня появился интерес к изучению VBA. Буду мыслить!
 
А что еще нужно прописать в коде функции VLookUpAllSheets чтобы она показывала  сумму трех значений в строке идущих за искомым значением?
Страницы: 1
Читают тему
Наверх