Excel – передача нескольких аргументов в функцию как одна строка

Я хватаюсь за соломинку с этим.

Можно ли заставить формулу Excel обрабатывать строку как разделитель-запятую?

Например, в

=COUNTIF(range, criteria)

передать [$A$1:$A$10, "яблоко"] как диапазон и критерии как одну строку или массив. Я пробовал использовать TEXTSPLIT() и INDIRECT(), но безрезультатно. Может быть, существует функция DELIMITER(), о которой я просто не слышал?

Другими словами, есть ли способ заставить формулы Excel каким-то образом распознавать «,» в качестве разделителя или передавать массив аргументов, которые обходят требование Excel к запятой?

Что касается того, почему моя компания использует надстройку Excel со своими собственными функциями, которые, к сожалению, не могут быть распознаны или вызваны в среде Excel Labs. В моем случае использования у меня есть такой, который принимает 6 обязательных параметров, которым я хотел бы передать один аргумент в виде специальной лямбда-функции. Это значительно повышает удобство использования огромного количества приложений в моей компании.

AFAIK, нет, это невозможно с собственными формулами. Это также не будет работать с функцией, полученной из надстройки.

BigBen 07.06.2024 21:20

Вы думаете что-то вроде: =LET(z,"$A$1:$A$10,apple",y,TEXTSPLIT(z,,","),COUNTIF(INDIRE‌​CT(TAKE(y,1)),TAKE(y‌​,-1)))?

Scott Craner 07.06.2024 21:31

@ScottCraner пытается избежать этого варианта использования, поскольку он означает передачу 12 переменных, а не 1 или 6. Собственная формула выглядит следующим образом: =LVCELL("var1", "var2", "var3", "var4", "var5", «вар6»). Я не могу создать лямбду =LV(_cell), поскольку я не могу вызвать LVCELL из Labs, а также не могу использовать =LVCELL(LV("var1"), LV("var2"), LV("var3"), LV(" var4"), LV("var5"), LV("var6")), поскольку Excel Labs не распознает адрес ячейки, вызвавшей его. Если бы это было возможно, я мог бы идентифицировать 6 переменных по положению листа. Как минимум, я вижу =LVCELL(LV("var1", $A$1), LV("var2", $A$1) и т.д.... с 12 входными переменными.

Prodigus 07.06.2024 21:44

Тогда я согласен, не существует нативной формулы, которая бы это сделала.

Scott Craner 07.06.2024 21:51

Можете ли вы создать именованную функцию и вызвать ее, скажем, EVAL? Сделайте это что-то вроде =LAMBDA(X,EVALUATE(x)), снимок в темноте, честно говоря, я ничего подобного не пробовал. Теперь позвоните ему с помощью =EVAL("COUNTIF("&Your string&")")

JvdV 07.06.2024 23:08

@JvdV Это именно то, что я надеялся услышать, когда задавал этот вопрос, ха-ха. Я думал об этом, но понятия не имею, как вызвать функцию как строку. Насколько я понял, определение EVALUATE либо заново изобретает функцию вручную, либо вызывает ее напрямую.

Prodigus 07.06.2024 23:14

@JvdV подожди, подожди, подожди... EVALUATE() это что-то?? Я думаю, это действительно может сработать! superuser.com/questions/253353/…

Prodigus 07.06.2024 23:20
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
2
7
115
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В последних версиях Excel вы найдете функцию TEXTSPLIT().

В ячейку А1 введите a,b,123.45,b,c, а в ячейку B1 =TEXTSPLIT(A1,",").

Значения в B1, C1, D1, E1 могут использоваться в других функциях. например =CONCAT(UPPER(B1),UPPER(C1),UPPER(E1),TEXT(D1,"00000.000")) — это формула в B2 ниже

Вам, вероятно, придется прочитать о функциях, которые «разливаются»... [O365Support][2]


В Б2 =LET(vals,TEXTSPLIT(A1,","),MATCH("b",vals,0))

Обратите внимание, что B2 не зависит от A2. Формула в A2 показывает расширенный диапазон, формула в B2 показывает, как использовать разделение внутри формулы (не затрагивая соседние ячейки).

Мой вопрос заключается в том, чтобы удалить запятые, которые вы использовали в формуле CONCAT(), чтобы разделить параметры и при этом добиться того же результата. Однако, спасибо

Prodigus 07.06.2024 21:50
Ответ принят как подходящий

Хорошо, попробуйте вот это:


Шаг 1. Создайте именованную функцию в диспетчере имен, используя древнюю функцию макроса Excel 4.0EVALUATE():

Шаг 2: Теперь вызовите его, например:


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

Также обратите внимание, что у меня это сработало только тогда, когда я удалил пробел перед словом «яблоко».

И последнее замечание; эту книгу теперь необходимо будет сохранить с включенным макросом (".xlsm")!

Абсолютно блестящий; делает возможными две априорные невозможности. Его можно ввести непосредственно в Excel Labs, минуя диспетчер имен, и использовать для более сложных функций. Его также можно вызвать анонимно, если вы знаете, как это сделать. EVAL = LAMBDA(x, LET( y, """apple""" & "&" & """банан""", EVALUATE(y) ) ); Вы сообщили мне новости, которые одновременно и сделали, и испортили мои выходные в 17:00 в пятницу. Это удивительно мощный инструмент (как только вы освоите все кавычки) и работает в обоих моих описанных выше случаях использования с надстройкой. Моя единственная дилемма: ПОЧЕМУ XLSM 😭

Prodigus 08.06.2024 00:21

Для меня это станет корпоративным кошмаром. Не знаю, стоит ли мне притворяться, что я никогда этого не видел...

Prodigus 08.06.2024 00:22

@ProdigusProgrammer Я одновременно рад и сожалею, что сделал и испортил тебе выходные!

JvdV 08.06.2024 01:05

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