Страницы: 1
RSS
Написать цикл в пользовательскую функцию, прошу помощи
 
Уважаемые товарищи специалисты!
Я наивно полагал, что справлюсь сам, но EXCELL и VBA остудили мой пыл и я залип. Имеется некий массив данных, на основе которых автозаполняются различные формы и документы. В частности международная транспортная накладная СМР.
Чего я хотел:
Чтобы ВПР искала в сводной таблице номер СМР и брала оттуда данные для заполнения граф.
Столкнулся с проблемой, когда по одной СМР едет несколько грузов и каждый со своим идентификатором (инвойсом). Решил накалапуцать пользовательскую функцию.
Функция должна просматривать данные в сводной таблице по определенному столбцу, находить все значения и сцеплять их между собой через запятую.
Понимаю, что нужно писать цикл, а именно с ним у меня и возникли проблемы… Не умею, как оказалось.
Помогите плиз.
Пример во вложении.
Лишь стремясь к невозможному, можно достичь максимального.
 
Готовое решение не подойдет?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ух ты ж!!! Ща попробую! Так-то вроде по описанию подходит. Поиграюсь, отпишусь! Спасибо за наводку!
Изменено: Сергей Сахаров - 10.02.2016 15:25:03
Лишь стремясь к невозможному, можно достичь максимального.
 
Так и здесь в копилке есть VLOOKUPCOUPLE() с возможно нужным функционалом.
Только вот не понял что куда и по какому условию сцеплять...
 
РАБОТАЕТ!!!!! Я о таком даже не мечтал!!!!
The_Prist, спасибо огромное!!!
Изменено: Сергей Сахаров - 10.02.2016 16:50:33
Лишь стремясь к невозможному, можно достичь максимального.
 
Hugo, в СМР надо перечислить все инвойсы, которые с ней едут. Решение, подсказанное The_Prist, работает как нельзя лучше! Функция ищет в общем массиве необходимый номер и сцепляет все номера инвойсов, которые находятся в одной строке с нужным номером СМР.
А VLOOKUPCOUPLE() я тоже посмотрю. Спасибо.
Лишь стремясь к невозможному, можно достичь максимального.
 
Цитата
Сергей Сахаров написал:
СМР надо перечислить все инвойсы, которые с ней едут.
это и ежу понятно :)
Но что такое цмп или смр, где его искать и что за инвойсы?...
А функционал обоих UDF похож, но моя попроще во всём. И код легко модифицировать под другие похожие задачи, тут штук 5 разных версий по форумам гуляет.
 
Цитата
Hugo написал: Но что такое цмп или смр, где его искать и что за инвойсы?...
CMR - это международная транспортная накладная. В файле с примером 3 листа. Вторым листом идет CMR. А номера инвойсов на первом листе в колонке "Invoice"
Лишь стремясь к невозможному, можно достичь максимального.
 
Да и ладно... Вот же номера... не номера вовсе.
Но что и по какому критерию понадобилось сцеплять, откуда и куда (конкретно адреса ячеек!!!) - так и не рассказали. А в целом меня только это и интересовало, чтоб проверить подходит ли функционал UDF.
 
Цитата
Hugo написал:
Но что и по какому критерию понадобилось сцеплять, откуда и куда (конкретно адреса ячеек!!!) - так и не рассказали.
Виноват! Исправляюсь! :)
На листе tblShipmentsIN имеется стобец О с номерами инвойсов и столбец AI с номерами накладных. Как я говорил ранее по одной накладной может следовать несколько грузов с разными инвойсами.
На листе CMR есть ячейка Н3, в которой указывается номер СМР, и есть ячейка С23, в которой должны быть перечислены все инвойсы, которые едут с этой накладной.
Так понятно?
А можно попросить ссылочку на VLOOKUPCOUPLE().
Насколько я понимаю разницу, все ВПРы ищут критерий исключительно в первом стобце массива, а СЦЕПИТЬЕСЛИ на этом не заморачивается.
Лишь стремясь к невозможному, можно достичь максимального.
 
Цитата
Hugo написал: Так и здесь в копилке есть VLOOKUPCOUPLE()
Цитата
Сергей Сахаров написал: А можно попросить ссылочку
Да уж. Из 13 тем найти одну - проблема не подъемная!  :cry:
 
RAN, ну затупил... С кем не бывает? :)
Лишь стремясь к невозможному, можно достичь максимального.
 
Так что ли нужно?
Код
="packing lists: " & vlookupcouple(tblShipmentsIN!O:AI;21;H3;1;", ")

разделители ставьте свои вместо моих ";"
 
Цитата
Сергей Сахаров написал:
все ВПРы ищут критерий исключительно в первом стобце массива
кстати это можно обойти, подсунув массив в нужном виде с помощью choose() или даже if()
Страницы: 1
Наверх