В Range M6:M14
я хочу получить соответствующие данные на основе значений в Range K6:14
.
Однако я хочу иметь возможность гибкого выбора значений в Range M6:M14
на основе заголовка столбца, введенного в Cell M5
.
В таблице выбран столбец 2024-M
.
Если я изменю Cell M5
, например, на заголовок столбца Products
, Range M6:M14
будет выглядеть так:
Product B
Product E
Product B
Product H
Product D
Product E
Product D
Product F
Product H
Подводя итог, я ищу что-то вроде этого:
Range M6:14 =XLOOKUP(K6:K14,$H$1:$H$17,Based on input in Cell $M$5,NA(),0)
Примечание:
lookup_array
всегда будет одинаковым. В этом примере Range $H$1:$H$17
. lookup_array
не уникальны. В этом примере 130
, 400
и 70
. lookup_array
не уникально, оно всегда будет появляться в Range M6:M14
с той же частотой, как вы можете видеть для 130
, 400
и 70
в примере. Range M6:M14
должны не только соответствовать значениям Column A
. Это может быть любой столбец таблицы, указанный в заголовке столбца, введенном в Cell M5
.Какая формула мне нужна, чтобы результат в Range M6:M14
работал на основе выбранного заголовка столбца в Cell M5
?
В этом случае это может сработать: =VLOOKUP(K6:K11,FILTER(E3:I17,LEFT(E1:I1,4)=LEFT(M5,4)),2,0)
Я просто сделаю это с помощью вспомогательных столбцов и буду использовать формулы шаг за шагом:
Сначала в ячейку N5
введите число 0.
В ячейку N6
напишите формулу ниже:
=XMATCH(K6,DROP($H$3:$H$17,O6,0),0,1)
.
В ячейку O6
напишите формулу ниже:
=SUM(--($K$5:K5=K6)*($N$5:N5))
Перетащите формулы в столбце N и столбце O, вы получите следующее:
Вот что делает столбец O:
например, ячейка O7 = 2, что означает, что строка 2 в H3:H17 имеет значение = 400, поэтому, чтобы найти «следующие» 400 в H3:H17, нам нужно удалить первые две строки в H3:H17, прежде чем мы выполним XMATCH. .
Ячейка N7 = 8; это означает, что 8-я строка в H5: H17 имеет значение = 400. (мы удаляем первые две строки, поэтому массив поиска имеет вид H5:H17 вместо H3:H17).
Наконец, мы получаем окончательные результаты в столбце P.
Формула в ячейке P6
:
=INDEX(DROP($I$3:$I$17,O6,0),N6,1)
Вы можете перетащить его вниз.
Если вы хотите отображать значения на основе заголовка в M5, просто измените формулу ниже: (замените I3:I17 на XLOOKUP($M$5,$A$1:$I$1,$A$3:$I$17))
=INDEX(DROP(XLOOKUP($M$5,$A$1:$I$1,$A$3:$I$17),O6,0),N6,1)
Вот что вы можете сделать для достижения желаемого результата, используя одну формулу динамического массива:
=LET(
_A, K6:K14,
_B, H3:H17,
_RollingA, MAP(_A,LAMBDA(α,COUNTIF(α:K6,α))),
_RollingB, MAP(_B,LAMBDA(α,COUNTIF(α:H3,α))),
XLOOKUP(_A&"|"&_RollingA,_B&"|"&_RollingB,XLOOKUP(M5,A1:I1,A3:I17)))
Кроме того, последний вопрос , который отмечен текущим запросом, оба разные, хотя в строке темы указано о гибком столбце, но в контексте ФП нигде не упоминалось, что выходной столбец должен быть гибким, пожалуйста старайтесь быть краткими и ясными в своих вопросах.
Чтобы немного объяснить приведенное выше решение, мы используем функцию MAP()
для создания накопительного/скользящего/пробегающего счетчика для соответствующих массивов, которые имеют дубликаты, а именно. Выбранный один и массив поиска, чтобы создать уникальную последовательность или искомое значение для получения желаемого результата.
Или используйте, создав собственный LAMBDA()
:
=LET(
α, K6:K14,
δ, H3:H17,
ƒx, LAMBDA(ε,φ, MAP(ε, LAMBDA(Σ, COUNTIF(φ:Σ,Σ)))),
XLOOKUP(α&"|"&ƒx(α,K6),δ&"|"&ƒx(δ,H3),
XLOOKUP(M5,A1:I1,A3:I17,""),""))
Немного похожий метод, примененный мной здесь Отображать результаты ФИЛЬТРА в том же порядке, что и значения в диапазоне критериев
Я думаю, что одна из причин, по которой вы, ребята, используете греческие буквы в LET, заключается в том, чтобы убедиться, что имя переменной не конфликтует со ссылками на ячейки (A1, B2 и т. д.). Но как легко набирать греческие буквы? Есть ли у вас специальная клавиатура, предназначенная для греческих символов, или что-то в этом роде?
Ярлыки Excel. ALT+224
--> α
, ALT+235
--> δ
и т. д.
Я понимаю. Все равно их сначала нужно запомнить.
Формула в M6
:
=MAP(K6:K14,LAMBDA(x,@DROP(TOCOL(FILTER(IFS(E3:H17=x,F3:I17),F1:I1=M5),3),COUNTIF(K6:x,x)-1)))
Нужно включить столбец А, чтобы получить «Продукты», верно? :)
Я думаю ты прав. Я прочитал мимо этого требования. Теперь уже поздно приспосабливаться. Спасибо за уведомление @nkalvi.
Аналогично другим методам, то есть с использованием бегущих частот (с SUM
):
=LAMBDA(h_, k_, data_range, col_headers, header_for_match,
LET(
i_index, XMATCH(header_for_match, col_headers),
i_, INDEX(data_range, , i_index),
freq, LAMBDA(arr,
LET(
indices, SEQUENCE(ROWS(arr)),
MAP(
indices,
LAMBDA(i,
SUM(IF(TAKE(arr, i) = INDEX(arr, i, ), 1, 0))
)
)
)
),
h_freq, h_ & " " & freq(h_),
k_freq, k_ & " " & freq(k_),
xlook, XLOOKUP(k_freq, h_freq, i_),
formatted, IF(
RIGHT(header_for_match, 2) = "-M",
TEXT(xlook, "0%"),
xlook
),
formatted
)
)(H3:H17, K6:K14, A3:I17, A1:I1, M5)
Разве вам не нужно было бы изменить массив поиска вместе с диапазоном поиска? Логика поиска процентов, которые не относятся к продажам этого года (или не являются
S
продажами), для меня не складывается.