Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Создание большого именованного массива констант, Массив констант на 256 и более элементов
 
Здравствуйте.
Имеется необходимость использовать в формулах именованный массив констант размером 256 и более.
К примеру, есть восемь условий и несколько различных результатов комбинаций этих условий. Делать выбор результатов с помощью ЕСЛИ проблематично, поэтому имея набор результатов, соответствующих всем возможным комбинациям условий, можно необходимый результат получить с помощью ИНДЕКС.
Проблема заключается в ограничении размера вводимой формулы при задании имени. Может быть есть возможность обойти это ограничение, или вычислить необходимый массив из нескольких поменьше.
 
можно так:
Код
=ИНДЕКС(ВЫБОР(уровень;массив1;массив2;...);значение)
 
Alec Perle,
Цитата
Alec Perle написал:
Проблема заключается
пока проблему видите только Вы, поэтому лучше приложите файл пример будьте добры.
 
Alec Perle,  и правда что-то путано.  Что Вы там хотите, что у Вас не помещается....   не надо пример на все ваши 256 up констант, но хоть что-то нужно.  Ну и тема конечно не по вопросу. Как я понял, вы массив создали, теперь не знаете что с ним делать. Значит проблема не в создании.
Изменено: БМВ - 3 Сен 2018 12:37:14
 
Я бы с удовольствием, только зачем Вам пустой файл? При присвоении имений и вводе формулы больше определенного количества знаков даже сообщения никакого нет, только звук "бип". Вопрос именно по указанной проблеме.
 
Alec Perle, чем не устроил ответ MCH,
Лень двигатель прогресса, доказано!!!
 
кажется  понял
в имя есть желание запихнуть ={1;2;3;4;...…. 999998;99999 ….. } . и оно не влезает? Так?
То есть вопрос как собрать большой массив из мелких, которые еще можно внести. Так?
Изменено: БМВ - 3 Сен 2018 12:46:56
 
MCH, спасибо за наводку, почти то, что надо, только хотелось бы избавиться от лишних функций в формуле, тем более "выбор" тоже надо делать по какому-то из условий. Попытка использовать:
Код
=ВЫБОР({1;2};массив1;массив2)
дает двумерный массив. Хотя, если эту формулу загнать в имя, а потом делать ИНДЕКС уже с учетом двумерности, можно избавится от лишних если.
Насколько я понял, преобразовать двумерный массив в одномерный нетривиально, поэтому проблема, в большей ее части, решена. Еще раз спасибо.
БМВ, именно так.
Изменено: Alec Perle - 3 Сен 2018 12:46:37
 
Цитата
Alec Perle написал:
преобразовать двумерный массив в одномерный нетривиально
, ну при условии что все пачки будут равные по количеству то
=INDEX(CHOOSE({1\2};{1;2;3};{4;5;6});N(INDEX(MOD(ROW(A1:A6)-1;3)+1;));N(INDEX(INT((ROW(A1:A6)-1)/3)+1;)))

Изменено: БМВ - 3 Сен 2018 13:04:37
 
Круто. Пока перевел, пока разобрался, пока исправил ошибки... Но в итоге вышло:
Код
=ИНДЕКС(ВЫБОР({1;2};{1:2:3};{4:5:6});Ч(ИНДЕКС(ОСТАТ(СТРОКА(A$1:A$6)-1;3)+1;));Ч(ИНДЕКС(ЦЕЛОЕ((СТРОКА(A$1:A$6)-1)/3)+1;)))
И в имени работает!
 
Цитата
Alec Perle написал:
пока разобрался
не совсем разобрались. хотя может для вас это не важно, но  если в моем примере будет последовательность {1;2;3;4;5;6}, то у вас {1;4;2;5;3;6}. не согласованы столбцы и строки.
 
А, это я не поправил, игрался с направлениями векторов. Кстати, у меня вернет все же {1:2:3:4:5:6}. Вот в чем не разобрался, если честно, это в конструкции
Код
Ч(ИНДЕКС(;))
Изменено: Alec Perle - 3 Сен 2018 14:33:30
 
Цитата
Alec Perle написал:
Кстати, у меня вернет все же {1:2:3:4:5:6}.
не верю
выбор вернет {1:2:3;4:5:6}
индекс ({1:2:3;4:5:6};{1;2;3;1;2;3};{1;1;1;2;2;2}) -ваще должен вернуть ошибку {1;4;#REF!;2;5;#REF!} так как столбцов 3 а строк 2,а не наоборот.
Цитата
Alec Perle написал:
это в конструкции Ч(ИНДЕКС
без этого основной индекс вернет только одно значение, а не массив.
тут коммент от MCH
Изменено: БМВ - 3 Сен 2018 14:41:59
 
Теперь, в принципе, все понятно. Буду экспериментировать. Спасибо, и за разъяснение тоже.
 
Del
Изменено: С.М. - 4 Сен 2018 19:51:27
 
С.М., Количество элементов, а не количество символов.
Изменено: БМВ - 3 Сен 2018 23:06:26
 
Del.
Изменено: С.М. - 4 Сен 2018 19:53:16
 
С.М., все-таки существует проблема совместимости. Я знаю, что мой проект будет использоваться и в Excel 2003. Да, я Ваш файл открыл в XP (с преобразователем формата), и даже увидел эти именованные списки. Но вот внести исправления уже не могу, даже если просто поставить курсор в поле ввода формулы, она обрезается до 254 знаков и вылазит ошибка.
БМВ, переделал Вашу формулу на объединение четырех маленьких массивов по 64 элемента в один на 256, полет нормальный. У меня таким способом, я так понимаю, будет ограничение в 65536 элементов, если нет другого способа создавать массив ссылок на строки и столбцы, как через СТРОКА().
Кстати,
Цитата
БМВ написал:
не верю выбор вернет {1:2:3;4:5:6}
Пока разбирался, не все прочитал, только сейчас заметил. Однако (через F9 в строке формул проверил):
Код
=ВЫБОР({1;2};{1:2:3};{4:5:6})
дает {1;4:2;5:3;6}, т.е. 3 столбца и 2 строки, что и требуется дальше.
Изменено: Alec Perle - 3 Сен 2018 23:32:48
 
А почему нельзя разместить массив на отдельном (скрытом) листе и использовать в формулах ссылку на диапазон?
 
Пока все размещается на одном листе, не вижу смысла создавать новый, тем более копирование - перенос листов создаст ненужные связи и т.д.
 
Цитата
С.М. написал:
на Лист2 100*8=800 элементов :
, хорошо, не элементов, а размерность массива видимо ограничена 256 по измерениям, не проверял столбцы, но  более 256 элементов с разделителем ";" , действительно не дает ввести.

Цитата
Alec Perle написал:
У меня таким способом, я так понимаю, будет ограничение в 65536 элементов, если нет другого способа создавать массив ссылок на строки и столбцы, как через СТРОКА().
Почему 65536? 1048576 , только я не уверен, что это надо делать. Формула была сделана скорее просто как возможность, но таблица будет  и проще в создании, корректировке, да и при множественных вызовах, даст выигрыш.
Изменено: БМВ - 4 Сен 2018 07:41:14
 
Del..
Изменено: С.М. - 4 Сен 2018 19:53:46
 
похоже нужно и вопрос задать, и систему не сдать (что б никто не догадался)
а то разгадают кто не попадя и давай вместо автора идеи в лото выигрывать
Изменено: Ігор Гончаренко - 4 Сен 2018 19:18:32
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
С.М., Внести и занести - для меня разные понятия, Интерфейс не дает работать с такой формулой в имени. По крайней мере у меня. (Excel2016x32). Зная Вашу макро специализацию, предположу, что данный массив был впихнут через VBA. Я прав? Если прав, то это второй ответ на вопрос темы, то что не получается через интерфейс можно один раз сделать через VBA.
 
Цитата
БМВ написал:
предположу, что данный массив был впихнут через VBA. Я прав?
Да, Вы правы, вот этот страшный макрос :
Код
Sub TestФИО()
    Names.Add "ФИО.123", Selection.Value
End Sub
Цитата
Ігор Гончаренко написал:
а то разгадают кто не попадя и давай
Ok. Удалил свою часть "шелухи".
 
Господа,
это повторялось тут много раз, но напомню еще разок:
решить задачу гораздо проще, если  решать собственно задачу, а не искать выход из ситуации, в которую забрел автор, блуждая в поисках решения и свернув не на самый удачный вариант из тысяч возможных
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Игорь, все достаточно четко. Есть необходимость не внося на лист, использовать достаточно большой массив констант. Интерфейс в имена его вносить не дает. Предложено два варианта решения.
Так как моя цигарка тяготеет к формулам, то предложен вариант именно формульный. С.М., предложил вариант решения вопроса через VBA. Что не  так?
Другое дело, зачем такой массив констант - вот это уже вопрос к ТС.

Хватит ворчать :-)
Изменено: БМВ - 4 Сен 2018 20:50:15
 
массив констант - это способ решения с помощью массива констант
а задача-то  какая????

понимаешь? "сколько людей должны утонуть (стать переправой) чтобы остальные переправились через  болото?"
понимаешь? если нужно переправиться на другой берег то не обязательно переправляться по трупам своих товарищей, можно постороить мост или переправу
пример не от кровожадности, а для наглядности.
Изменено: Ігор Гончаренко - 4 Сен 2018 21:30:05
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
С.М., интересная идея, возьму на вооружение, тем более, что сам массив создаю из таблицы.
Цитата
БМВ написал:
зачем такой массив констант - вот это уже вопрос к ТС.
Если это вопрос, то часть ответа в #1. Накидал пример. В примере есть четыре условия и пять различных результатов этих условий. Как видно, прямое применение ЕСЛИ создает формулу с большим количеством вложений. Я намеренно использовал в примере случайные числа, так как в общем случае закономерности, позволяющей упростить формулу, особо нет (то есть в реальном проекте она есть, но двухдневная попытка упростить обернулась в итоге допущенной в процессе ошибкой). Применение ВЫБОР(ИНДЕКС) с массивом номеров результатов уменьшает формулу,ошибки исключены. Также довольно просто внести изменения в логику выбора - достаточно поменять массив. Условия и ячейки с результатами в реальной таблице не смежные и все заключены в имена.
Ігор Гончаренко, как раз способ решения с помощью констант и привело в итоге к необходимости создания большого массива, для восьми и более условий. Согласитесь, использовать ЕСЛИ в таком случае нереально. Может быть у Вас в багаже опыта и есть более приемлемый способ решения изначальной проблемы, но это уже другая тема.
 
Цитата
Alec Perle написал: способ решения с помощью констант и привело в итоге к необходимости создания большого массива, для восьми и более условий
Правильно. Этот способ решения. Но Гончаренко Вам не об этом толкует! Вы выбрали один путь из многих. Вы уверены, что он лучший? Вы не описываете ЗАДАЧУ. А без этого не понять, хорош Ваш вариант или выбрали из худших.

Метро - хороший вид транспорта? Да! Спросим по другому: на чем поехать в лес за грибами? И после этого: метро для этого - хороший транспорт?
Поэтому: здесь - о массивах. Если пожелаете по задаче - новая тема.
Страницы: 1 2 След.
Читают тему (гостей: 1)
Наверх