|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
Добрый день. Кто нибудь делал формулу ВПР с логическим условием в параметре? Пример в файле вложения. Заранее всем спасибо! Ok.MadG ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 17:46 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
madg, и что же за логическое условие? Из примера, если честно, ни фига не ясно. Вы бы хоть на слова не скупились - вроде не чернилами, не должны обеднеть. Гадая на кофейной гуще: =ПРОСМОТР(A4;E10:E12;H10:H12) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 19:34 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
Добрый день. Прошу извинить за краткость - пришлось уходить от компа, дописывал уже на ходу. Описание проблемы: У путевки автомобиля есть дата+время открытия и закрытия(абсолютно непредсказуемые величины), во время движения а\м водитель получает накладные и, наверное, товар. Каждая накладная имеет дату+время создания. Массив данных о накладных ежедневно сливается на почту одним файлом. Задача - проставить для каждой накладной номер путевого листа, выбрав данные по двум условиям: Номер а\м в ТТН=Номер а\м в Путевом листе Дата ТТН входит в период действия путевого листа. С первым никаких проблем нет, а вот второе никак не могу реализовать. В голове крутится что то вроде SELECT * FROM ХХХ WHERE УУУ BETWEEN AND Но как это организовать для ячейки... ВПР по двум условиям, по конкатенции двух полей в каждой из таблиц не получится - дата+время в каждом из документов величины абсолютно непредсказуемые. Добавления по возможным вариантам: Менять столбцы местами - без проблем, в любой из таблиц Использовать VBA так же не проблема. :( вот только сообразить не могу как использовать... Во вложении файл - постарался как мог понятнее изобразить что нужно в итоге. Заранее всем спасибо. Ok.MadG ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 02:31 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
Вы, кстати, зря про "абсолютно непредсказуемые". В любом случае, все даты/время проставлены (что в накладных, что в ПЛ), за исключением, может быть, незакрытых "текущих" ПЛ для машин (или такого нет?). При этом в ПЛ ДатаВремяЗакрытия>=ДатаВремяОткрытия, при этом ДатаВремяНакладной в любом случае попадает в какой-либо ПЛ (или нет?). У вас обе таблицы (ПЛ и НАКЛ) - накопительные? То есть данные сначала дописываются к уже имеющимся, а затем мы рассчитываем недостающее? Таблицы, надеюсь, хранятся на отдельных листах (и как они назваются) или в именованных диапазонах? Можно ли сортировать исходные таблицы (например, ПЛ)? - хотя это для решения не имеет принципиального значения. И да, дайте пример с бОльшим количеством данных (или хотя бы опишите порядок цифр - кол-во машин, сколько "дозаливается" ПЛ и Накладных), и с реальными форматами ваших данных. Чтобы было на чём посмотреть построение выборок (или подбора), скорости обработки... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 03:39 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
AndreTMВы, кстати, зря про "абсолютно непредсказуемые". В любом случае, все даты/время проставлены (что в накладных, что в ПЛ), за исключением, может быть, незакрытых "текущих" ПЛ для машин (или такого нет?). При этом в ПЛ ДатаВремяЗакрытия>=ДатаВремяОткрытия, при этом ДатаВремяНакладной в любом случае попадает в какой-либо ПЛ (или нет?). У вас обе таблицы (ПЛ и НАКЛ) - накопительные? То есть данные сначала дописываются к уже имеющимся, а затем мы рассчитываем недостающее? Таблицы, надеюсь, хранятся на отдельных листах (и как они назваются) или в именованных диапазонах? Можно ли сортировать исходные таблицы (например, ПЛ)? - хотя это для решения не имеет принципиального значения. И да, дайте пример с бОльшим количеством данных (или хотя бы опишите порядок цифр - кол-во машин, сколько "дозаливается" ПЛ и Накладных), и с реальными форматами ваших данных. Чтобы было на чём посмотреть построение выборок (или подбора), скорости обработки... Добрый... Данные хранятся на сервере, идут накопительно, можно выгрузить за произвольный период. Сначала появляются(исключая случаи возможных тех.накладок) данные по путевым листам, потом данные о накладных. Данные хранятся на разных листах - куда положу выгрузку там и будут. Названия листов - произвольны. Опять же, как назову, так и будет. Большее количество данных дать не могу-на данный момент нет возможности сделать выгрузку. Прошу дать хотя бы принципиальную идею, для этого файла в предпоследнем посте достаточно, ибо данные будут примерно такой структуры. Да и я вроде бы не совсем глуп - доработать идею под себя наверняка смогу. Все дело в том, что сколько я не ищу в нете что нибудь похожее - все или конкатенцию мучат, или другие способы, позволяющие найти конкретную строку, используя для поиска сопоставление двух и более значений, и ища равное им значение в другой таблице. У меня задача чуть другая - выбрать среди строк, относящихся к определенной а\м, запись с периодом, в который входит дата накладной, в которой указана эта самая определенная а\м. Пробовал в VBA сделать, но пока бросил, т.к. дальше тупого перебора у меня дело не пошло. А перебор как то мне не нравится... :) некрасиво как то, что ли... Заранее всем спасибо за идеи!!! Ok.MadG ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 17:47 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
madg, одним SQL запросом : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2013, 22:08 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
> madg > Задача - проставить для каждой накладной номер путевого листа, выбрав данные по двум условиям: > > Номер а\м в ТТН=Номер а\м в Путевом листе > Дата ТТН входит в период действия путевого листа. точнее так Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 01:40 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
По идее, действительно, такие вещи надо делать, используя SQL. А вообще, эту инфу уже можно было включить при вытягивании с сервера С другой стороны, можно и собственную обработку прикрутить. На самом деле, я у вас не так просто интересовался про непротиворечивость данных и прочее. Ваша задача как раз и решается так, как говорят - созданием ключей и подбором по ним. Хоть формулой, хоть через VBA. И вы зря про то, что получится "тупой перебор" - при отсортированной таблице поиска всё очень быстро. ПЛ.ДатаЗакрытия вам нужен только для проверки. Ключ создаем по НомерАвто+ДатаОткрытия/Накладной. Действительно, если ПЛ был открыт в какой-то момент, то все накладные с датами после этого момента и до даты открытия следующего ПЛ - принадлежат этому ПЛ. А для создания таких условий мы отсортируем список ПЛ по НомерАвто, затем по ДатаОткрытия. И тогда можно использовать функцию ПРОСМОТР() (в векторной форме), или ВПР(;;;ИСТИНА), или ИНДЕКС(ПОИСКПОЗ(. Хитрость там, конечно, имеется (Ключевое поле в ПЛ нельзя расширять вне списка ПЛ) - но результаты, тем не менее, получаем нужные. Кроме того, разделив ИНДЕКС() и ПОИСКПОЗ(), можно проделать дополнительные проверки. Таким же методом можно решить и с помощью VBA, просто поиск в списке ПЛ (отсортированном!) надо выполнять, например, половинным делением интервала. Естественно, при этом никакие дополнительные столбцы не понадобятся. Посмотрите пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2013, 02:15 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
Добрый день. Спасибо всем участникам. Решение, удовлетворившее суть моей задачи выглядит вот так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
В референс VBA нужно поднять галку на MicrosoftActiveX Data Objects 2.xxx Libray Дополнительно к этому нужно дописать обработчик ошибок. PS. У кого есть замечания\улучшения кода - прошу отписаться! Еще раз всем спасибо! Ok.MadG ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 14:22 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
madg, Здесь "мелочные придирки" :)Для создания объекта соединения можно использовать позднее связывание Код: vbnet 1. 2. 3. 4.
Тогда не нужно будет "В референс VBA поднимать галку наMicrosoftActiveX Data Objects 2.xxx Libray" Минусы такого способа - невозможность использовать именованные константы, предоставляемые подключаемой библиотекой - отсутствие "поддержки" IDE на этапе написания кода Неплохо было бы добавить в 'Extended Properties' параметр, явно указывающий наличие подписей полей в диапазонах данных. Чтобы не закладывыаться на дефолтное поведение Jet Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
В запросе условие Код: sql 1.
- лишнее, так как по этому условию данные также фильтруются при соединении таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2013, 20:04 |
|
ВПР с логическим условием в параметре
|
|||
---|---|---|---|
#18+
madg, Еще немножко "исправлений". Если использовать в коннекте строку подключения не через провайдер, а через драйвер Код: vbnet 1. 2. 3.
то можно справиться и с проблемами одновременного использования кода на всех версиях Excel. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 00:20 |
|
|
start [/forum/topic.php?fid=61&msg=38116166&tid=2175073]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 124ms |
0 / 0 |