Страница 2 из 3

Re: Сравнение

Добавлено: 10 дек 2008, 00:18
Aent
heisnod писал(а):Приведите пожалуйста пример
Лобовое решение:
={ЕСЛИ(ЕНД(ПОИСКПОЗ(SEL;KEY;0));0;СМЕЩ(Данные;ПОИСКПОЗ(SEL;KEY;0)-1;СТОЛБЕЦ()-1;1;1))}
Это массивная формула. Её надо вводить для группы ячеек используя CTRL+SHIFT+ENTER
Данные - 2х мерный массив данных
SEL - 1 мерный массив (вектор) с выбираемыми фамилиями
KEY - 1 мерный массив (часть массива Данные) где ищутся фамилии

Разумеется принимающая область должна быть достаточных размеров
И можно повозившись убрать #Н/Д
Можно убрать KEY,переопределив его формулой через Данные.
А можно наоборот, сделать на принимающем листе скрытую колонку куда возвращается номер
выбираемой строки или #Н/Д

Re: Сравнение

Добавлено: 10 дек 2008, 00:25
Teslenko_EA
heisnod, "практика показала" замена в коде была.
Кроме удаления лищних переменных и корректного объявления используемых,
в строке запроса заменено "...$A2:E25000]..." на "...$A1:B50]...", и эта конструкция становится работоспособной, т.к таблицы начинаются с первой строки независимо объявлено ;HDR=YES или ;HDR=NO (HDR=YES в первой строке имена полей)
Евгений.

Re: Сравнение

Добавлено: 10 дек 2008, 00:32
Aent
Пробела между ПОИС и КПОЗ в формуле нет.
Почему то IE7 упорно его показывает :(

Re: Сравнение

Добавлено: 10 дек 2008, 01:19
heisnod
Teslenko_EA писал(а): в строке запроса заменено "...$A2:E25000]..." на "...$A1:B50]...", и эта конструкция становится работоспособной, т.к таблицы начинаются с первой строки независимо объявлено ;HDR=YES или ;HDR=NO (HDR=YES в первой строке имена полей)
Евгений.


Евгений, Вы хоть сами поняли, что написали?

Re: Сравнение

Добавлено: 10 дек 2008, 01:22
heisnod
Aent писал(а): ={ЕСЛИ(ЕНД(ПОИСКПОЗ(SEL;KEY;0));0;СМЕЩ(Данные;ПОИСКПОЗ(SEL;KEY;0)-1;СТОЛБЕЦ()-1;1;1))}

Спасибо за пример. Попробую в нем разобраться. Но конечно читается он сложновато.

Еще ни разу не работал с массивными формулами. По-моему, довольно мощный инструмент. Теперь самое время разобраться. Большое спасибо.

Re: Сравнение

Добавлено: 10 дек 2008, 02:03
Aent
Основная идея в том что функция ПОИСКПОЗ может работать с векторами.
Во втором массиве ищется каждый элемент первого массива. Третьий аргумент - 0 - определяет тип поиска как точное сравнение. Результат работы этой функции - вектор, содержащий номер
строки для соответствующего элемента или #Н/Д
Я неявно для простоты предположил в примере, что массив SEL cодержит только ключи
присутствующие в таблице.
Если это не так, обработка становится несколько более сложной.
Придётся вводить дополнительную колонку или определять количество итерраций для зацикленной формуля

Re: Сравнение

Добавлено: 10 дек 2008, 08:52
heisnod
Странно, если делаю как обычная формула, то вроде работает как надо. А если через массивную функцию, то все одним и тем же значением заполняет. Что я не так сделал?

Re: Сравнение

Добавлено: 10 дек 2008, 14:38
Aent
Вариант с 2 столбцами
Для обозримости всё собрано на 1 листе
Выборка номеров строк массивной формулой
Получение данных - обычной
Что бы сказать что у вас не так как минимум нужно увидеть файл...
Присылайте на E-Mail asease cобака inbox.ru

Re: Сравнение

Добавлено: 10 дек 2008, 15:14
heisnod
Как мне изменить формулу в ячейках с фигурными скобками ярко желтой заливкой? Выдает ошибку нельзя изменить часть массива.

Re: Сравнение

Добавлено: 10 дек 2008, 15:33
Aent
Перед вводом/редактированием массивной формулы нужно выделить ВЕСЬ массив.
Затем вводите/редактируете формулу в строке формул.
Фигурные скобки явно не вводятся.
Завершаете ввод не ENTER а одновременным нажатием Ctrl+Shift+Enter.