Сравнение

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

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

Разумеется принимающая область должна быть достаточных размеров
И можно повозившись убрать #Н/Д
Можно убрать KEY,переопределив его формулой через Данные.
А можно наоборот, сделать на принимающем листе скрытую колонку куда возвращается номер
выбираемой строки или #Н/Д
Андрей Энтелис,
aentelis.livejournal.com
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

heisnod, "практика показала" замена в коде была.
Кроме удаления лищних переменных и корректного объявления используемых,
в строке запроса заменено "...$A2:E25000]..." на "...$A1:B50]...", и эта конструкция становится работоспособной, т.к таблицы начинаются с первой строки независимо объявлено ;HDR=YES или ;HDR=NO (HDR=YES в первой строке имена полей)
Евгений.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Пробела между ПОИС и КПОЗ в формуле нет.
Почему то IE7 упорно его показывает :(
Андрей Энтелис,
aentelis.livejournal.com
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

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


Евгений, Вы хоть сами поняли, что написали?
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Aent писал(а): ={ЕСЛИ(ЕНД(ПОИСКПОЗ(SEL;KEY;0));0;СМЕЩ(Данные;ПОИСКПОЗ(SEL;KEY;0)-1;СТОЛБЕЦ()-1;1;1))}

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

Еще ни разу не работал с массивными формулами. По-моему, довольно мощный инструмент. Теперь самое время разобраться. Большое спасибо.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Основная идея в том что функция ПОИСКПОЗ может работать с векторами.
Во втором массиве ищется каждый элемент первого массива. Третьий аргумент - 0 - определяет тип поиска как точное сравнение. Результат работы этой функции - вектор, содержащий номер
строки для соответствующего элемента или #Н/Д
Я неявно для простоты предположил в примере, что массив SEL cодержит только ключи
присутствующие в таблице.
Если это не так, обработка становится несколько более сложной.
Придётся вводить дополнительную колонку или определять количество итерраций для зацикленной формуля
Андрей Энтелис,
aentelis.livejournal.com
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Странно, если делаю как обычная формула, то вроде работает как надо. А если через массивную функцию, то все одним и тем же значением заполняет. Что я не так сделал?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Вариант с 2 столбцами
Для обозримости всё собрано на 1 листе
Выборка номеров строк массивной формулой
Получение данных - обычной
Что бы сказать что у вас не так как минимум нужно увидеть файл...
Присылайте на E-Mail asease cобака inbox.ru
Вложения
Пример.zip
(2.91 КБ) 33 скачивания
Андрей Энтелис,
aentelis.livejournal.com
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Как мне изменить формулу в ячейках с фигурными скобками ярко желтой заливкой? Выдает ошибку нельзя изменить часть массива.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Перед вводом/редактированием массивной формулы нужно выделить ВЕСЬ массив.
Затем вводите/редактируете формулу в строке формул.
Фигурные скобки явно не вводятся.
Завершаете ввод не ENTER а одновременным нажатием Ctrl+Shift+Enter.
Андрей Энтелис,
aentelis.livejournal.com
Ответить