Как я понимаю, массивы возвращают несколько последовательных значений. И возник философский вопрос, пока без практического применения. Интересует операция, которая позволяла бы из массива длинной, например, в 5 значений (от 1 до 5 цифры), получить массив длинной в 3 значения, "выколов" два по какому-либо условию (например, хотим убрать 3 и 4 цифры).
Решение строго БЕЗ VBA.
Пока разобрался только как "подсветить" массивно неугодные значения:
Код
=ЕОШИБКА(ПОИСКПОЗ({1;2;3;4;5};{3;4};0))
Всем привет!
Как я понимаю, массивы возвращают несколько последовательных значений. И возник философский вопрос, пока без практического применения. Интересует операция, которая позволяла бы из массива длинной, например, в 5 значений (от 1 до 5 цифры), получить массив длинной в 3 значения, "выколов" два по какому-либо условию (например, хотим убрать 3 и 4 цифры).
Решение строго БЕЗ VBA.
Пока разобрался только как "подсветить" массивно неугодные значения:
Т.е. если 3 встречается в массиве более одного раза - удалять все?
Не совсем. Есть два разных массива, мы их сравниваем друг с другом. Если большой массив содержит значения, которые есть в маленьком массиве, то мы все совпадения "выкалываем". И таким образом уменьшаем большой массив.
vikttur, именно значения пока (положение тоже звучит заманчиво).
Т.е. если 3 встречается в массиве более одного раза - удалять все?
Не совсем. Есть два разных массива, мы их сравниваем друг с другом. Если большой массив содержит значения, которые есть в маленьком массиве, то мы все совпадения "выкалываем". И таким образом уменьшаем большой массив.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Вы куда? Задача: есть два массива (виртуальных). Получить виртуальный, но сокращенный. Сокращенный не получится, только со значениями 0 или логическими ЛОЖЬ вместо неугодных. Но на лист можно выгрузить сокращенный. Или это я неправильно понял?
Вы куда? Задача: есть два массива (виртуальных). Получить виртуальный, но сокращенный. Сокращенный не получится, только со значениями 0 или логическими ЛОЖЬ вместо неугодных. Но на лист можно выгрузить сокращенный. Или это я неправильно понял?vikttur
Задача: есть два массива (виртуальных). Получить виртуальный, но сокращенный.
Да, задача именно в этом. Неужели нет возможности сократить количество элементов массива на физическом уровне?
Pelena, Ваша формула, в принципе, подходит, так как могу представить способы работы с первыми Х элементами массива. Попробую по шагам понять принцип работы, а Вы поправьте, если что =)
1). Выкалываем ЛОЖЬ'ю значения, которые ищем:
Код
ЕОШИБКА(ПОИСКПОЗ($B$1:$F$1;$B$2:$C$2;0))
2). Превращаем ряд булевых значений в порядковый номер столбца:
Код
=ЕСЛИ("см пункт 1";СТОЛБЕЦ($A$1:$E$1))
3). Ищем 1-й наименьший элемент. И здесь не понятно, зачем якориться за первый столбец, если можно просто ввести цифру 1? А, понял, ссылка динамическая, мы "как бы" сортируем значения в массиве. Гениально!
Код
=НАИМЕНЬШИЙ("см пункт 2";СТОЛБЕЦ(A1))
4). Выводим значения массива по очерёдности. Программа сначала просматривает исходный массив, ищет в нём наименьшее значение и выводит его на первую позицию. Дальше 2-е наименьшее - нашли в начальном массиве и положили на вторую позицию.
Код
=ИНДЕКС($B$1:$F$1;"см пункт 3")
5). Превращаем #ЧИСЛО! значения ошибок, которые в виртуальном массиве находятся в самом конце множества, в пустоту:
С моей точки зрения это было бы сильным упрощением для задачи =) Т.к. готовые формулы Excel ограничены, а для VBA предела нет =) В том смысле, что верти имеющуюся объектную модель как хочешь.
Задача: есть два массива (виртуальных). Получить виртуальный, но сокращенный.
Да, задача именно в этом. Неужели нет возможности сократить количество элементов массива на физическом уровне?
Pelena, Ваша формула, в принципе, подходит, так как могу представить способы работы с первыми Х элементами массива. Попробую по шагам понять принцип работы, а Вы поправьте, если что =)
1). Выкалываем ЛОЖЬ'ю значения, которые ищем:
Код
ЕОШИБКА(ПОИСКПОЗ($B$1:$F$1;$B$2:$C$2;0))
2). Превращаем ряд булевых значений в порядковый номер столбца:
Код
=ЕСЛИ("см пункт 1";СТОЛБЕЦ($A$1:$E$1))
3). Ищем 1-й наименьший элемент. И здесь не понятно, зачем якориться за первый столбец, если можно просто ввести цифру 1? А, понял, ссылка динамическая, мы "как бы" сортируем значения в массиве. Гениально!
Код
=НАИМЕНЬШИЙ("см пункт 2";СТОЛБЕЦ(A1))
4). Выводим значения массива по очерёдности. Программа сначала просматривает исходный массив, ищет в нём наименьшее значение и выводит его на первую позицию. Дальше 2-е наименьшее - нашли в начальном массиве и положили на вторую позицию.
Код
=ИНДЕКС($B$1:$F$1;"см пункт 3")
5). Превращаем #ЧИСЛО! значения ошибок, которые в виртуальном массиве находятся в самом конце множества, в пустоту:
С моей точки зрения это было бы сильным упрощением для задачи =) Т.к. готовые формулы Excel ограничены, а для VBA предела нет =) В том смысле, что верти имеющуюся объектную модель как хочешь.
***
Елена, Ваша формула работает даже с текстом =)Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Понедельник, 09.06.2014, 14:10
китин, упс, кажется я спалил свои кривые руки =) Ваша формула хорошо работает и заточена под конкретные значения. Как я понимаю, Вы логически "выкалываете" строго заданные значения:
Код
($B$1:$F$1<>$B$2)*($B$1:$F$1<>$C$2)
****** китин, я понял, в чем была заминка =) Я вводил массивную формулу сразу на все 5 ячеек, а Вы прописывали её на каждую конкретную отдельно.
китин, упс, кажется я спалил свои кривые руки =) Ваша формула хорошо работает и заточена под конкретные значения. Как я понимаю, Вы логически "выкалываете" строго заданные значения:
Код
($B$1:$F$1<>$B$2)*($B$1:$F$1<>$C$2)
****** китин, я понял, в чем была заминка =) Я вводил массивную формулу сразу на все 5 ячеек, а Вы прописывали её на каждую конкретную отдельно.
А Вы попробуйте в строке формул выделить часть формулы, например, ЕОШИБКА(ПОИСКПОЗ($B$1:$F$1;$B$2:$C$2;0)) и нажать F9. Чтобы вернуть исходный вид формулы, нажимаем ESC
А Вы попробуйте в строке формул выделить часть формулы, например, ЕОШИБКА(ПОИСКПОЗ($B$1:$F$1;$B$2:$C$2;0)) и нажать F9. Чтобы вернуть исходный вид формулы, нажимаем ESCPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Pelena, вау, полезное колдовство! =) Ребят, с Вашей помощью моя магия набирает силу.
Что ж, похоже, есть возможность понять, как эти сложные конструкции работают. А вот как бы самому стать художником... Задачек, может, от простого к сложному где найти...
Pelena, вау, полезное колдовство! =) Ребят, с Вашей помощью моя магия набирает силу.
Что ж, похоже, есть возможность понять, как эти сложные конструкции работают. А вот как бы самому стать художником... Задачек, может, от простого к сложному где найти...Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279