Данные -> Проверка -> Диапазон ячеек + Диапазон целых или дробных чисел

Автор bmg33, 19 ноября 2016, 22:50

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

bmg33

Здравствуйте, уважаемые знатоки. Большую часть времени я не прошу вас о помощи, пока не столкнусь с неразрешимой для меня задачей.
Очень надеюсь, что вы поможете мне с одной из них.

Итак, у ОО и ЛО есть замечательный инструмент, с помощью которого можно сделать выпадающий список, берущий данные из указанных ячеек:
Данные -> Проверка -> Диапазон ячеек

С этим вопросов нет, все работает как часики. Но однажды возникла необходимость менять указанные диапазоны ячеек, в зависимости от какого-либо условия. С этим тоже удалось справиться через логическую функцию IF.
И вот тут самое интересно, в одной из задач есть необходимость одним из диапазонов назначить огромное количество целых чисел условно от 1 до 999999. Вопрос также легко решается, созданием дополнительного списка с числами от 1 до 999999. Но это жутко неудобно по причине того, что размер файла растет очень сильно.

Вопрос: можно ли каким-то образом, формульно задать диапазон для чисел, чтобы не городить костыли с этим списком чисел от 1 до ...

Например:
IF(A1=B10;O1:O14;Z1:Z999999) - так это выглядит сейчас, при этом в диапазон Z1:Z999999 реально вписаны цифры: в ячейку Z1 - цифра 1... в ячейку Z5000 - цифра 5000 и так далее.
IF(A1=B10;O1:O14;'1-999999') - а вот примерно  так хотелось бы сделать, чтобы не увеличивать размер файла на десятки мегабайт реальным списком.

Возможно делать так, как хотелось бы?
Огромное спасибо вам заранее.

mikekaganski

Попробуйте назначить макрос на изменение значения A1, который будет устанавливать параметры валидации (список).
По настройке валидации можно посмотреть здесь: https://forum.openoffice.org/en/forum/viewtopic.php?f=20&t=25345
С уважением,
Михаил Каганский

bmg33


rami

Цитата: bmg33 от 19 ноября 2016, 23:13
А без макросов никак не получится?
Получится, но на больших данных будет тормозить расчёт значений для списка. Попробуйте формулу:
IF(A1=B10,O1:O14,ROW(A1:A65000)) на больших чем 65000 данных у меня начинает хулиганить

bmg33

Цитата: rami от 19 ноября 2016, 23:34
Получится, но на больших данных будет тормозить расчёт значений для списка. Попробуйте формулу:
IF(A1=B10,O1:O14,ROW(A1:A65000)) на больших чем 65000 данных у меня начинает хулиганить
Ты восхитителен! Спасибо большое. Сейчас проверю работает или нет.

rami

Цитата: rami от 19 ноября 2016, 21:34на больших чем 65000 данных у меня начинает хулиганить
Максимальное число строк в списке 65547, если больше, возникают проблемы с отображением и прокруткой списка.

mikekaganski

Вот честно: ну не надо список всех целых чисел от ... до. Там же есть возможность это задать иначе, без выпадающего списка! Никто прокручивать до 50000 значения не будет!
С уважением,
Михаил Каганский

rami

Цитата: mikekaganski от 20 ноября 2016, 00:06
Вот честно: ну не надо список всех целых чисел от ... до. Там же есть возможность это задать иначе, без выпадающего списка! Никто прокручивать до 50000 значения не будет!
Прокручивать длинные списки удобно за "пузырёк" на полосе прокрутки, а не за сам список. Этот способ в зависимости от условия выдаёт разные списки, другим способом так не получится.

bmg33

Цитата: rami от 19 ноября 2016, 23:34
IF(A1=B10,O1:O14,ROW(A1:A65000))
Спасибо еще раз просто огромное, удалось избавится от костыля :) Все чудесно работает, немного притормаживает, но не страшно.

Цитата: mikekaganski от 20 ноября 2016, 00:06
Вот честно: ну не надо список всех целых чисел от ... до. Там же есть возможность это задать иначе, без выпадающего списка! Никто прокручивать до 50000 значения не будет!
Ничего страшного :) в ячейку с таким списком любое число из диапазона можно просто вписать вручную.

rami

Кстати, в функции ROW()  буквы столбцов можно опустить, чтобы не смущали:IF(A1=B10,O1:O14,ROW(1:65547))

bmg33

Цитата: rami от 20 ноября 2016, 00:49
Кстати, в функции ROW()  буквы столбцов можно опустить, чтобы не смущали:IF(A1=B10,O1:O14,ROW(1:65547))
Спасибо, у меня почему-то не работает, но буквы меня и так не смущают.

rami

Цитата: bmg33 от 20 ноября 2016, 00:59
Цитата: rami от 20 ноября 2016, 00:49
Кстати, в функции ROW()  буквы столбцов можно опустить, чтобы не смущали:IF(A1=B10,O1:O14,ROW(1:65547))
Спасибо, у меня почему-то не работает, но буквы меня и так не смущают.
Если у кого будет Ошибка 501 — нужно заменить в формуле , (запятые) на ; (точки с запятой).

В Apache OpenOffice 4.1.3 требует наличие буквы в адресах и ограничивает список до 16384 строк.

В LibreOffice 5.0 и выше не требует наличие буквы в адресах и ограничивает список до 65547 строк.