Вопрос: Нечувствительная к регистру, но сохраняющая регистр функция-заменитель, excel


Есть ли способ сделать это, т. Е. Foo, FOO, а также fOO выйдет как Bar, BAR, и и bAR, без необходимости индивидуально вводить все возможные перестановки в функцию.

знак равноSUBSTITUTE(A1,"foo","bar") чувствителен к регистру, SUBSTITUTE(lower(A1),"foo", "bar") хорош для некоторых приложений, но удаляет все существующие различия в случае A1; так FoofooFOO будет идти barbarbar, Очевидно, вы можете использовать несколько замещений, чтобы поймать все вхождения, но иногда это настоящая боль.

Большое спасибо.


1
2018-04-24 09:23


Источник


Нет, для этого нет простого решения. самый быстрый - это, вероятно, написать поисковый запрос для каждого варианта. - Máté Juhász
@ MátéJuhász Должен быть какой-то способ. Я имею в виду, что даже вне UDF вы не могли бы сделать одну функцию, которая возвращает массив случаев букв и другой, чем затем переводит этот случай в конечный результат. Ужасно, но решение ... - Some_Guy
Да, конечно, есть много возможностей с vba, но ваш вопрос помечен как [функция-лист]. Также просьба о UDF будет слишком широка здесь, как вы, вероятно, знаете ... - Máté Juhász
@ MátéJuhász вне UDF, я сказал - Some_Guy
Никогда не предполагайте, что вы знаете, кто был ниспослан. Обычно это не люди, комментирующие. Тем не менее, вам нужно иметь соответствующий случай на выходе, или вы просто пытаетесь выяснить, как обрабатывать любой возможный случай ввода последовательно? - music2myear


Ответы:


Уродливый, но функциональный ответ.

Работает для любых 2 строк одинаковой длины.

Просто положив шляпу на ринг, надеясь, что кто-то может придумать лучшее решение (возможно, формула массива?)

Требуется вспомогательные столбцы. Верхний ряд вспомогательных столбцов использовался для индекса.

enter image description here

Формулы:

 A2      : (original string)
 C1      : blank, or 0 (needed for next column)
 C2:C... : =SUBSTITUTE(UPPER(A2),"FOO","BAR")
 D1      : =B1+1
 D2:D... : =IF(EXACT(MID($A2,C$1,1),UPPER(MID($A2,C$1,1))),MID($B2,C$1,1),LOWER(MID($B2,C$1,1)))
 B2      : concatenate (or textjoin if you're using new excel)

Перетащите столбец D, пока не будет достаточно столбцов. Eyeball это, или использовать =max(len(A:A)) чтобы найти максимальную длину.


0
2018-04-24 12:44



Ваше решение подходит для 3-символьных длинных строк, но как насчет более длинных? У вас более реалистичный вариант использования? - Máté Juhász
Мой случай хорош для любых 2 строк одинаковой длины. , По общему признанию, более общее решение может иметь дело со строками разной длины. Однако; неясно, как именно эти случаи должен обрабатываться, это будет зависеть от конкретных потребностей пользователя. Я подумаю об этом, но пока это решение для того случая, в котором я нуждался. - Some_Guy
@ MátéJuhász, я имею в виду, что если бы у меня были «GOODBYE» и «HELLO». Как должен «GoodBye» будет обработан? "Здравствуйте"? "Здравствуйте"? "Здравствуйте"? "ЗДРАВСТВУЙТЕ"? Это не обязательно понятно, и это не тот случай, о котором я задал этот вопрос. - Some_Guy