XLOOKUP с гибким столбцом для return_array и не уникальными значениями в search_array

0 А Б С Д Э Ф г ЧАС я Дж К л М 1 Продукты Магазин 2023-С 2023-М 2024-С 2024-М 2 3 Продукт А Магазин3 80 2% 120 22% 4 Продукт Б Магазин1 320 17% 400 15% Данные из столбца 5 Продукт Б Магазин3 470 30% 750 8% 2024-S Выбрано 2024-М 6 Продукт Б Магазин2 500 4% 70 4% 400 15% 7 Продукт С Магазин2 160 10% 245 10% 400 35% 8 Продукт Д Магазин1 500 8% 130 4% 70 4% 9 Продукт Д Магазин4 130 11% 130 4% 520 42% 10 Продукт Е Магазин2 75 8% 650 15% 130 4% 11 Продукт Е Магазин1 60 47% 90 7% 90 7% 12 Продукт Е Магазин4 500 25% 400 35% 130 4% 13 Продукт Е Магазин3 350 9% 140 13% 130 9% 14 Продукт F Магазин2 60 30% 130 9% 70 16% 15 Продукт Г Магазин2 90 5% 370 12% 16 Продукт Н Магазин1 390 27% 70 16% 17 Продукт Н Магазин2 70 18% 520 42%

В 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)

Примечание:

  1. lookup_array всегда будет одинаковым. В этом примере Range $H$1:$H$17.
  2. Значения в lookup_array не уникальны. В этом примере 130, 400 и 70.
  3. Если значение в lookup_array не уникально, оно всегда будет появляться в Range M6:M14 с той же частотой, как вы можете видеть для 130, 400 и 70 в примере.
  4. Решение из этого вопроса здесь не работает, потому что результаты в Range M6:M14 должны не только соответствовать значениям Column A. Это может быть любой столбец таблицы, указанный в заголовке столбца, введенном в Cell M5.

Какая формула мне нужна, чтобы результат в Range M6:M14 работал на основе выбранного заголовка столбца в Cell M5?

Разве вам не нужно было бы изменить массив поиска вместе с диапазоном поиска? Логика поиска процентов, которые не относятся к продажам этого года (или не являются S продажами), для меня не складывается.

P.b 30.06.2024 13:13

В этом случае это может сработать: =VLOOKUP(K6:K11,FILTER(E3:I17,LEFT(E1:I1,4)=LEFT(M5,4)),2,0)

P.b 30.06.2024 13:21
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
3
2
120
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я просто сделаю это с помощью вспомогательных столбцов и буду использовать формулы шаг за шагом:

Сначала в ячейку 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 и т. д.). Но как легко набирать греческие буквы? Есть ли у вас специальная клавиатура, предназначенная для греческих символов, или что-то в этом роде?

rachel 30.06.2024 13:30

Ярлыки Excel. ALT+224 --> α , ALT+235 --> δ и т. д.

Mayukh Bhattacharya 30.06.2024 13:33

Я понимаю. Все равно их сначала нужно запомнить.

rachel 30.06.2024 13:35

Формула в 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 30.06.2024 17:34

Я думаю ты прав. Я прочитал мимо этого требования. Теперь уже поздно приспосабливаться. Спасибо за уведомление @nkalvi.

JvdV 01.07.2024 12:25

Аналогично другим методам, то есть с использованием бегущих частот (с 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)

Другие вопросы по теме