2017-01-30 10 views
0

Я хотел бы найти n-е значение в списке, который соответствует определенным критериям, и эти значения печатаются в отдельных местах в отдельных листах.Показывать n-е значение в списке, который соответствует определенным критериям [EXCEL]

Более конкретно, у меня есть список номеров счетов, начинающихся с числа или с PF, и я хочу, чтобы первое (или второе, третье и т. Д.) Значение начиналось с PF, чтобы отображать на листе счета Proforma Invoice, а первый (или второй, третий и т. д.), начиная с номера, отображаемого на листе счета-фактуры.

В настоящее время у меня есть выбор номера счетов-фактур, как так:

Счет #

PF17-0982 

43256 

65342 

96038 

PF16-0934 

10293 

И я хотел бы напечатать п-е значение в этом списке, отвечающих критериям, которые я даю, так что либо начинающийся с числа, либо начинающийся в PF, в отдельном листе.

Сначала я попытался

=IF(LEFT('Top Sheet'!S5)="P",'Top Sheet'!S5,"") 

, который работает, чтобы найти номер, начинающийся с PF, но, очевидно, только для первой ячейки в списке. У меня также есть

=IF(ISNUMBER(LEFT('Top Sheet'!S5)*1),'Top Sheet'!S5,"") 

Который снова работает чудесно для первого значения в списке, но не для многого другого.

Так что, естественно, я искал google и пытался использовать функции INDEX и MATCH и SEARCH, как найдено здесь https://exceljet.net/formula/get-first-match-cell-contains, но я не хочу, чтобы результат был другим списком, зависящим только от одного из значений в списке номеров счетов-фактур. Однако я не против иметь промежуточный список (например, список значений TRUE и FALSE), которые в конечном итоге приведут к тому, что у меня будет один вывод. У меня есть этот список в тот момент, что и было сделано с помощью:

=SUMPRODUCT(--ISNUMBER(SEARCH({"PF"},'Top Sheet'!S5)))>0 

И это приводит меня здесь, я пробовал различные варианты вышеуказанных методов и не безнадежно. Я либо получаю ошибку некоторого описания, либо только значения TRUE и FALSE. Я надеюсь в этом есть смысл.

+0

Вы считаете, что нужно фильтровать список с помощью сводной таблицы (или Power Query), или вам нужно, чтобы отфильтрованный список был динамическим? – Slai

+0

Привет, не могли бы вы рассказать об этом немного? Я не знаком с PivotTable или Power Query. Кроме того, спасибо за редактирование ха-ха. – Ella

ответ

1

Другой формула подход, с помощью которого можно ввести формулу обычно, чтобы использовать функцию AGGREGATE, чтобы определить номер строки в массиве счетов-фактур. С оператором SMALL вы можете работать с массивом, игнорировать ошибки и возвращать несколько значений.

Если Invoices именованный диапазон, содержащий список счетов-фактур, а затем:

  • Для счетов-фактур, начиная с PF

    =IFERROR(INDEX(Invoices,AGGREGATE(15,6, 1/(LEFT(Invoices,2)="PF")*ROW(Invoices)-MIN(ROW(Invoices))+1,ROWS($1:1))),"") 
    
  • Для счетов-фактур, начиная с цифры

    =IFERROR(INDEX(Invoices,AGGREGATE(15,6,1/ISNUMBER(-LEFT(Invoices,1)*ROW(Invoices))*ROW(Invoices)-MIN(ROW(Invoices))+1,ROWS($1:1))),"") 
    

Для любой из этих формул введите некоторую ячейку и заполните ее, пока формула не вернет пробелы. Аргумент ROWS... будет увеличивать и возвращать соответствующий k для функции SMALL.

Другим методом было бы использовать простой фильтр, а затем скопировать/вставить видимые ячейки туда, где вы хотите.

Или вы можете использовать расширенный фильтр, который имеет встроенный метод для вставки результатов в другое место.

+0

Я изо всех сил стараюсь сделать это, но полезно не делать crtl + shift + enter, особенно когда объясняю другим людям в офисе. Я пытаюсь избежать вариантов копирования-вставки, поскольку я хотел бы, чтобы все мои рабочие листы были заполнены верхним листом. – Ella

+0

@Ella, с какой частью вы боретесь? –

+0

Привет, кажется, работает сейчас, не знаю, что я сделал неправильно первый раз, спасибо! – Ella

1

Чтобы извлечь несколько элементов из списка, вы можете использовать функцию INDEX с помощью SMALL для создания формулы массива.

=IFERROR(INDEX($B$4:$B$9,SMALL(IF((ISNUMBER($B$4:$B$9)),ROW($B$4:$B$9)-3),ROW(1:1)),1),"") 

ВАЖНО: используйте CTRL + SHIFT + ENTER при вводе этой формулы, чтобы сделать его формулу массива.

Эта формула принимает первое числовое значение из вашего списка. Если формула изменена на ROW (2: 2), она выберет 2-ое числовое значение из списка, и вы можете автозавершить формулу, чтобы извлечь столько, сколько хотите.

Это довольно сложная формула, но вы сначала индексируете диапазон «INDEX (B4: B9», затем используйте SMALL с оператором if »(ISNUMBER (B4: B9)». Затем определите первую строку исходных данных «ROW (B4: B9) -3)« минус 3 - это потому, что это 3 строки сверху. Затем строку, соответствующую вашим критериям, которые вы хотите извлечь «ROW (1: 1)», и последний столбец, содержащий значение, которое вы хотите "), 1"

Я не лучший человек, чтобы объяснить эту формулу, но есть несколько хороших обучающих онлайн.

Example with formula in F4

+0

Спасибо за быстрый ответ Гордон! Это работает, чтобы извлечь цифры и намного лучше, чем все, что я мог бы придумать в одиночку. Я буду играть с ним для записей, начинающихся в PF (которые, надеюсь, помогут мне понять, как все это работает). – Ella

+0

Спасибо, вы должны иметь возможность использовать LEFT ($ B $ 4: $ B $ 9,2) = "PF". Кроме того, если вы хотите использовать более одного критерия, используйте «*» как «И» (критерии 1) * (критерии 2), и смутно «+» может использоваться для «ИЛИ». Это не легко. Мне все равно придется копировать его из того места, где я использовал его раньше, так как я не могу писать его с нуля. – Gordon

0

PivotTable альтернатива:

  • (опция) выберите диапазон ячеек, включая заголовок "счета-фактуры #" ячейки
  • Insert вкладка>PivotTable
  • убедитесь, что ячейка заголовка включена в Table/Range: поле
  • Existing Worksheet и Location диапазон, в котором вы хотите отфильтровать список
  • на PivotTable Field List, который показывает на право проверить Invoice # поле
  • на листе, в Row Labels ячейки нажатием кнопки треугольник фильтра и выберите Label Filters>Begins With...>PF
  • (по желанию) в Design вкладке нажмите Grand Totals >Off for Rows and Columns, снимите Column Headers и переименовывать текст в Row Labels клеток при необходимости

для чисел, вы можете скопировать сводную таблицу и изменить этикетки фильтр для Less Than...>A

Когда изменяется исходный код Invoice #, вы можете нажать Refresh All на вкладке для сводных таблиц для обновления.

+0

Благодарим вас за это, я не уверен, что это то, что мне нужно для этого, но интересного ни к чему! – Ella

 Смежные вопросы

  • Нет связанных вопросов^_^