Связные выпадающие списки

Автор smesharic, 21 января 2016, 16:46

0 Пользователи и 1 гость просматривают эту тему.

smesharic

Доброго времени суток Товарищи.
Нужна Ваша помощь.
Делаю в рабочих целях документ с выпадающими списками которые связаны друг с другом.
Объясню подробнее.
Нужно так, что бы после выбора в первом выпадающем списке, определяло то, что можно выбрать во втором списке, в третьем и .д.
В Excel получилось такое реализовать. Но данная реализацию не работает в OO
Прошу Вашего содействия, совета по решению данного вопроса. Какие есть выходы из этой ситуации, куда копать?
Пример файла во вложении

rami

Посмотрите эту тему — кое-чем похожа на ваш вопрос

smesharic

Спасибо за скорый ответ, сейчас буду читать

smesharic

Цитата: rami от 21 января 2016, 17:13
Посмотрите эту тему — кое-чем похожа на ваш вопрос

Если честно принцип очень интересен, но все равно не то, пытался прикрутить это к своему методу получается полный коллапс...
Я в OO работаю впервые (пришлось). И макросы для меня немного пугающи..
Я думал вывести формулами "Если" "И" "ИЛИ" "НЕ", так же не получается, большая путаница..

JohnSUN

Если хочется сделать без макросов, на одних (не очень сложных) формулах, то посмотри вот этот ValidityDropDown.ods
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Тогда напишите подробней, что вы хотите сделать. Я понимаю, что содержимое второго выпадающего списка должно зависеть от выбранного элемента в первом списке. Вопрос как формируется содержимое списков?

smesharic

ЦитироватьЕсли хочется сделать без макросов, на одних (не очень сложных) формулах, то посмотри вот этот ValidityDropDown.ods

Спасибо. Сейчас буду разбираться в документе и формулах)

ЦитироватьТогда напишите подробней, что вы хотите сделать. Я понимаю, что содержимое второго выпадающего списка должно зависеть от выбранного элемента в первом списке. Вопрос как формируется содержимое списков?

Смотрите в идеале должно все выглядеть так
Пользователь открывает документ и видит (стандартная шапка в доке будет, описывать не буду) три столбца к примеру
ИмяФамилияОтчетсво
Под каждым из столбцов будет выпадающий список.
Нужно так что бы пока сотрудник не выбрал Имя, Фио и Отчетсво для него были недоступны + от выбора поля Имя зависли поля Фамилия и Отчество
Будет лист на котором будет список из Имен, фамилий и отчеств откуда и будет подбираться массив данных.
Я просто не знаю как еще подробнее описать, в моем доке что я прикладывал в целом все есть.

Сейчас пока буду знакомиться с файлом что прислали.
Спасибо

JohnSUN

Для списков фиксированного размера, ну, просто справочники, которые очень редко меняются, мне нравится вариант с именованными диапазонами и функцией INDIRECT() - в приложенном файле.
А для динамически расширяемых списков, с использованием того же принципа, в своё время писал макрос. Поместил там же, на ask.libreoffice.org... теперь найти не могу  ;D
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 22 января 2016, 11:46..мне нравится вариант с именованными диапазонами и функцией INDIRECT()
Мне тоже нравится, но и это кажется не то.

smesharic не смог точно объяснить задачу, по его первому примеру мы с тобой поняли одно, а в действительности мне кажется нужно другое.

Представь себе такую задачу: есть список из 1000 людей, есть 20 разных имён, 20 разных отчеств и 200 разных фамилий, понятно, что не все возможные сочетания будут использованы. Нужно выбрав имя получить выпадающий список отчеств, которые соответствуют этому имени, то же самое с фамилиями. Например, для имени Иван будут 10 отчеств (из 20) и 100 фамилий (из 200), а для имени Александр будут 15 отчеств (из 20) и 150 фамилий (из 200). А для сочетания Имя-Отчество будут отобраны только соответствующие фамилии. Для решения такой задачи нужно писать макрос, да не хилый.

smesharic

Ребят простите, я видимо совсем Вас сбил с толку. ФИО я для примера привел.
У меня будет так.
Есть 30 отделов.
В каждом отделе есть по 5-7 должностей
И на каждую должность есть свой набор прав
мне нужно что бы сотрудник выбрав свой отдел, нашел свою должность, и в третье поле ему получается подберется набор прав.
Совет
Цитироватьвот этот ValidityDropDown.ods
мне подходит, просто я еще не до конца с ним разобрался.
Не могу до конца понять кусок E17:E21

JohnSUN

Насчет "писать макрос" - согласен. И я согласен, и smesharic согласен  ;) И даже попытка написать была.
Вот только одно соображение беспокоит... Есть мнение, что для вот таких вот связанных списков лучше использовать единственное поле ввода. Эдакий широкий комбобокс, в выпадающем списке которого содержаться все полные ФИО. По мере ввода символов в поле, список фильтруется (сокращается) - что-то типа LIKE '%'+<введено>+'%'. А после выбора значения все три составные части ФИО разрезаются по пробелу и раскидываются по отдельным полям (в другом варианте ItemList содержит строки с полными ФИО для отображения и скрытые записи с их составными частями)
При такой организации и писать-отлаживать вроде как меньше, и оператору при вводе мороки не добавится...

А, вот и уточнение подоспело... Так нужно всего-то два связанных списка и один VLOOKUP()?
Цитата: smesharic от 22 января 2016, 15:44
Не могу до конца понять кусок E17:E21
Ну, как вычисляется E15 понятно, да? Просто в заголовках категорий (в твоем случае - в списке отделов) отыскивается тот, который выбран из списка в поле B1 и вычисляется его порядковый номер. Функция =INDEX(F2:G6;;E15) возвращает ОДНО значение из прямоугольника F2:G6. А вот если ввод формулы завершить не просто Enter, а Ctrl+Shift+Enter, то формула станет "формулой массива" и вернет из этого прямоугольника целую колонку с номером из E15 - то есть список должностей в этом отделе...
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

smesharic

ЦитироватьА, вот и уточнение подоспело... Так нужно всего-то два связанных списка и один VLOOKUP()?
Да ) Третье поле я хочу что бы подбором VLOOKUP() попадало
ЦитироватьCtrl+Shift+Enter, то формула станет "формулой массива
ни когда бы не додумался сам. Спасибо!
Сейчас буду дальше проверять и тестить.
Спасибо за участие в решении вопроса.

smesharic

Все получилось. Спасибо.
А как быть если у меня полей Subject больше чем 2 или 3.
Я вроде сделал, только вот на 3-е поле значение Н/Д выпадает...

rami

Цитата: smesharic от 22 января 2016, 14:17А как быть если у меня полей Subject больше чем 2 или 3.
Я вроде сделал, только вот на 3-е поле значение Н/Д выпадает...
В ячейке E15 в формулу нужно добавить третий параметр (порядок сортировки), так как у вас данные не отсортированы, то параметр должен быть 0=MATCH(A1;F1:H1;0)

smesharic

Благодарю. Получилось.
Добавил еще пару столбцов, работает :)
Эта формула будет работать если данные будут на другом листе?
К примеру выпадающий список на "Лист1"  а сам массив данных на "Лист2"
мне нужно будет указывать так "$Лист2.$D$2:$D$5" и "=INDEX($Лист2.F2:I4;;E15)"  ?