EXCEL: разделение значений, разделенных запятыми, в динамическом диапазоне

У меня есть таблица со значениями, разделенными запятыми, например

А Б заголовок 1 10,2 заголовок 2 3,4

Это динамический диапазон. Мне нужно разделить значение, потому что мне нужно искать значения в поисках определенного значения. Для этого я использовал TEXTSPLIT, но он не работает с динамическими диапазонами. TEXTSPLIT возвращает только первое значение, если я использую диапазон в качестве первого параметра.

=TEXTSPLIT(B2:B3;",")

это возвращает

А 10 3

У меня это работает с параметром «Данные» > «Текст в столбцы», но мне это нужно в формуле.

В конечном итоге мне нужно отфильтровать строки и показать только определенную строку на основе динамического числа. Формула, которую я использовал:

=IFERROR(INDEX(
    FILTER(B2:B3;
        (IFERROR(ISNUMBER(SEARCH(2;B2:B3));FALSE))
    )
;;1);"")

Это соответствует только первому значению в значении, разделенном запятыми. Поэтому я попробовал другую формулу.

=IFERROR(INDEX(
    FILTER(B2:B3;
        (IFERROR(ISNUMBER(SEARCH(2;B2:B3));FALSE))
    )
;;1);"")

Это работает, единственная проблема в том, что если я ищу цифру 1, то также попадает цифра 10.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
125
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий
=FILTER(B1:B5,MAP(B1:B5,LAMBDA(a,OR(VALUE(TEXTSPLIT(a,","))=2))))

Возможны разные маршруты, но из того, что вы записали, я понимаю, что вам нужно присутствие определенного динамического числа. У вас уже есть ms365 и хороший ответ другого пользователя на основе рекурсии с использованием LAMBDA(). Однако есть еще два варианта:

=FILTER(B1:B2,1-ISERR(FIND(","&4&",",","&B1:B2&",")))

Другой вариант — переключиться на БЕТА-канал и посмотреть, доступен ли REGEXTEST():

=FILTER(B1:B2,REGEXTEST(B1:B2,"\b"&4&"\b"))

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

Bob Pikaar 10.06.2024 16:07

@BobPikaar, это действительно не так. Я только что отредактировал снимок экрана, где искал цифру 4. Вы уверены, что в этих строках, разделенных запятыми, нет пробелов?

JvdV 10.06.2024 16:12

Спасибо @JvdV, это действительно так для первого решения. Я использовал метод SUBSTITUTE, чтобы избавиться от пробелов.

Bob Pikaar 10.06.2024 16:18

Нет необходимости, просто добавьте пробел и запятую: =FILTER(B1:B2,1-ISERR(FIND(", "&4&", ",", "&B1:B2&", ")))

JvdV 10.06.2024 16:38

Это работает в обоих случаях (с пробелом или без): =FILTER(P5:Q6;1-ISERR(FIND(","&3&","; ","&SUBSTITUTE(Q5:Q6;" ";"")&",")))

Bob Pikaar 10.06.2024 17:09

@BobPikaar, ах, у тебя смесь разных разделителей. Конечно, хорошая альтернатива.

JvdV 10.06.2024 17:13

Спасибо @user11222393,

в моем случае я получил следующую оптимизированную формулу

=IFERROR(INDEX(
    FILTER(A1:B2;
        IFERROR(MAP(B1:B2;LAMBDA(a;OR(VALUE(TEXTSPLIT(SUBSTITUTE(a; " "; "");","))=2)));FALSE)
);;1);"")

У вас уже есть несколько полезных ответов.

Я хотел поделиться формулой, позволяющей справиться с вашим ограничением TEXTSPLIT и возвращать только начальное значение в том случае, если вы используете его для диапазона ячеек, а не для одной ячейки:

=LET(b,B1:B2,
     MAKEARRAY(ROWS(b),MAX(LEN(b)-LEN(SUBSTITUTE(b,",",""))+1),
        LAMBDA(r,c,
INDEX(TEXTSPLIT(INDEX(b,r),","),,c))))

Вы также можете использовать комбинацию TEXTJOIN и TEXTSPLIT, но это не лучшая практика, поскольку для этого требуется, чтобы все значения были объединены как одно, чтобы снова разделить, что может легко достичь максимального ограничения символов TEXTJOIN:

=TEXTSPLIT(TEXTJOIN(";",,B1:B2),",",";")

Видите ли вы какие-либо преимущества или уникальные преимущества в своем решении по сравнению с другими ответами?

Bob Pikaar 11.06.2024 12:50

@BobPikaar, уникальность по сравнению с другими ответами заключается в том, что этот ответ сосредоточен на выдаче результата TEXTSPLIT (как описано в названии вашего вопроса + начале вашего вопроса). Другие решения обходят проблему, достигая описанного вами конечного результата, используя другую логику или используя MAP для сравнения строки с результатами разделения MAPPED. Поэтому мой ответ – не достичь конечной цели, а решить поставленную вами проблему.

P.b 11.06.2024 13:45

Спасибо за разъяснения. Я сохраню это.

Bob Pikaar 11.06.2024 20:39

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