Я хватаюсь за соломинку с этим.
Можно ли заставить формулу Excel обрабатывать строку как разделитель-запятую?
Например, в
=COUNTIF(range, criteria)
передать [$A$1:$A$10, "яблоко"] как диапазон и критерии как одну строку или массив. Я пробовал использовать TEXTSPLIT() и INDIRECT(), но безрезультатно. Может быть, существует функция DELIMITER(), о которой я просто не слышал?
Другими словами, есть ли способ заставить формулы Excel каким-то образом распознавать «,» в качестве разделителя или передавать массив аргументов, которые обходят требование Excel к запятой?
Что касается того, почему моя компания использует надстройку Excel со своими собственными функциями, которые, к сожалению, не могут быть распознаны или вызваны в среде Excel Labs. В моем случае использования у меня есть такой, который принимает 6 обязательных параметров, которым я хотел бы передать один аргумент в виде специальной лямбда-функции. Это значительно повышает удобство использования огромного количества приложений в моей компании.
Вы думаете что-то вроде: =LET(z,"$A$1:$A$10,apple",y,TEXTSPLIT(z,,","),COUNTIF(INDIRECT(TAKE(y,1)),TAKE(y,-1)))?
@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 входными переменными.
Тогда я согласен, не существует нативной формулы, которая бы это сделала.
Можете ли вы создать именованную функцию и вызвать ее, скажем, EVAL? Сделайте это что-то вроде =LAMBDA(X,EVALUATE(x)), снимок в темноте, честно говоря, я ничего подобного не пробовал. Теперь позвоните ему с помощью =EVAL("COUNTIF("&Your string&")")
@JvdV Это именно то, что я надеялся услышать, когда задавал этот вопрос, ха-ха. Я думал об этом, но понятия не имею, как вызвать функцию как строку. Насколько я понял, определение EVALUATE либо заново изобретает функцию вручную, либо вызывает ее напрямую.
@JvdV подожди, подожди, подожди... EVALUATE() это что-то?? Я думаю, это действительно может сработать! superuser.com/questions/253353/…



В последних версиях 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(), чтобы разделить параметры и при этом добиться того же результата. Однако, спасибо
Хорошо, попробуйте вот это:
Шаг 1. Создайте именованную функцию в диспетчере имен, используя древнюю функцию макроса Excel 4.0EVALUATE():
Шаг 2: Теперь вызовите его, например:
Пожалуйста, не обращайте внимания на точки с запятой, поскольку у меня есть голландская версия Excel. Просто замените их запятыми.
Также обратите внимание, что у меня это сработало только тогда, когда я удалил пробел перед словом «яблоко».
И последнее замечание; эту книгу теперь необходимо будет сохранить с включенным макросом (".xlsm")!
Абсолютно блестящий; делает возможными две априорные невозможности. Его можно ввести непосредственно в Excel Labs, минуя диспетчер имен, и использовать для более сложных функций. Его также можно вызвать анонимно, если вы знаете, как это сделать. EVAL = LAMBDA(x, LET( y, """apple""" & "&" & """банан""", EVALUATE(y) ) ); Вы сообщили мне новости, которые одновременно и сделали, и испортили мои выходные в 17:00 в пятницу. Это удивительно мощный инструмент (как только вы освоите все кавычки) и работает в обоих моих описанных выше случаях использования с надстройкой. Моя единственная дилемма: ПОЧЕМУ XLSM 😭
Для меня это станет корпоративным кошмаром. Не знаю, стоит ли мне притворяться, что я никогда этого не видел...
@ProdigusProgrammer Я одновременно рад и сожалею, что сделал и испортил тебе выходные!
AFAIK, нет, это невозможно с собственными формулами. Это также не будет работать с функцией, полученной из надстройки.