Как использовать функцию ** row () ** с оператором ** if () ** в Excel-2010 для возврата номера строки, если значение равно * true * - PullRequest
0 голосов
/ 01 июля 2019

как использовать функцию row () с оператором if () в Excel-2010 для возврата номера строки, если значение true . Если есть какой-то другой способ, с помощью которого я могу выполнить ту же работу, это тоже будет оценено. Задание таково: у меня есть диапазон данных в одном столбце с несколькими строками, и условие «если значение данных больше 50», чем я должен распечатать все нужные данные в другом столбце с каждым данным в отдельном строка.

Если это возможно с помощью функций row () и if () , все в порядке, любые другие методы также приветствуются.

1 Ответ

0 голосов
/ 01 июля 2019

Я не уверен, правильно ли я выполнил вашу задачу, но давайте попробуем. Давайте представим, что у вас есть несколько случайных чисел в ячейках A2:A20. Вы можете выбрать ячейки C2:C20 и ввести формулу массива нескольких ячеек , нажав Ctrl+Shift+Enter в Windows:

=IFERROR(INDEX($A$2:$A$20,SMALL(IF($A$2:$A$20>50,ROW($A$2:$A$20),"-"),ROW()-ROW($C$1))-ROW($A$1)),"")

Который проверит, если эти числа больше 50, и напечатает только соответствующие. Диапазон, в котором вы вводите эту формулу, ДОЛЖЕН быть по крайней мере равным по размеру диапазону, который вы «фильтруете».

UPD: Итак, как это работает?

Стадия 1 - фильтрация:

$A$2:$A$20>50

В формуле массива этот код превратит ваши значения в упорядоченный (что важно) массив из True и False в соответствии с> 50 проверками. Например, если у вас есть таблица со значениями {55,10,40,51,49,89}, они превратятся в {True,False,False,True,False,True}

Стадия 2 - разделение значений и позиция

IF( [Stage 1] ,ROW($A$2:$A$20),"-")

Этот оператор IF , основанный на проверке True / False, возвращает либо POSITION элемента, либо строковое значение "-". Позиция относится к листу, а не к ценностям - это будет важно позже. Итак, теперь мы имеем дело с массивом позиций для элементов, прошедших нашу проверку, и некоторыми строковыми значениями для всех остальных.

Этап 3 - изменить порядок позиций

SMALL( [Stage 2] ,ROW()-ROW($C$1))-ROW($A$1)

Функция SMALL помогает нам изменить порядок позиций, которые мы получаем из ЭТАПА 3. Таким образом, мы превращаем упорядоченный массив, например {2,"-","-",5,"-",7}, в {2,5,7,"#NUM!","#NUM!","#NUM!"}. Ошибка говорит нам, что мы попытались выполнить какое-то числовое действие со строкой. Это именно то, что нам нужно, чтобы отсортировать не относящиеся к делу ценности. Возвращаемое значение равно ROW()-ROW($C$1), и с помощью этого вычитания я определяю, какой номер массива из минимума должен возвращаться для каждой строки. Последнее вычитание -ROW($A$1) превращает связанные позиции листа {2,5,7,"#NUM!","#NUM!","#NUM!"} в связанные позиции таблицы {1,4,6,"#NUM!","#NUM!","#NUM!"}

Этап 4 - возврат начальных значений

INDEX($A$2:$A$20, [Stage 3] )

Это самая простая часть на мой взгляд. Итак, у нас есть массив таблиц связанных позиций. Теперь мы можем преобразовать его в фактические значения с помощью функции INDEX . Мы сообщаем этой функции, какую таблицу смотреть и какие значения строк возвращать. Таким образом, наш массив памяти {1,4,6,"#NUM!","#NUM!","#NUM!"} превращается в нечто подобное {55,51,89,"#NUM!","#NUM!","#NUM!"}. Который уже является результатом, которого мы хотим. Поскольку мы используем формула для нескольких ячеек массива - все значения будут распределены по строкам.

Этап 5 - эстетический

=IFERROR( [Stage 4] ,"")

Просто делает значения ошибок невидимыми. Это необязательный шаг, мне просто нравится, когда отчеты гладкие и блестящие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...