На листе Excel:
Столбец А заполнен случайными текстовыми значениями (например, словами / предложениями), которые необходимо обновить.
И столбцы B и C содержат строки, которые определяют изменения, которые необходимо внести в столбец A. Столбец B заполняет каждую ячейку старым текстом, а столбец C - новым текстом, каждая строка соответствует друг другу, то есть текст в B1 необходимо заменить текстом C1, B2 заменить на текст C2. В столбце B одна из вещей, которую нужно заменить, - это "
.
В столбце B нет повторяющихся значений. Однако в столбце C клетки могут повторяться. Замены должны соответствовать порядку, в котором они были написаны. И столбец D является результатом.
Каждая ячейка из столбца A должна проходить через эту замену из B1-C1, B2-C2, B3-C3 и т. Д. До конца команд замещения в столбцах BC. Таким образом, перед тем, как дать окончательный результат, текст из столбца A будет меняться несколько раз, и только после всех изменений будет показывать результат в столбце D.
Пример:
Cell A1: Hello!
Cell A2: How are you "John"?
Cell A3: "Nice! thanks"
Cell B1: ! Cell C1: &
Cell B2: & Cell C2: .
Cell B3: " Cell C3: (empty)
Cell B4: ? Cell C4: #
Cell B5: Nice. thanks Cell C5: Fine, THANKS.
Таким образом, ячейка A1, которая Hello!
будет изменена на B1-C1, также будет изменена Hello&
. Затем изменится B2-C2 с изменениями, внесенными во временный результат, Hello&
так и будет Hello.
. Затем изменится B3-C3, затем выполнит B4-C4, а затем B5-C5, и ничего не произойдет, потому "
что в нем не существует Hello.
.
После этого результат D1 будет Hello.
.
Затем он выполнит A2 изменения B1-C1 (ничего не делать), затем применяется для этого будет делать B2-C2 (ничего не делать), затем B3-C3, который How are you John?
будет выглядеть как (то есть символы кавычек будут удалены), затем будет делать B4-C4, который будет делать How are you John#
, а затем B5-C5, который здесь делать нечего.
Так что результат D2 есть How are you John#
.
Точно так же значение A3 "Nice! thanks"
будет сначала меняться с B1-C1 "Nice& thanks"
, затем станет , затем станет B2-C2 "Nice. thanks"
, затем станет B3-C3 Nice. thanks
(опять же, кавычки будут удалены), затем ничего не делать в B4-C4 и затем B5 -C5 сделает его наконец-то Fine, THANKS
в D3.
Результаты:
D1: Hello.
D2: How are you John#
D3: Fine, THANKS.
Какова будет формула в столбце D для выполнения этой множественной замены в строке, следуя порядку строк, записанному в столбцах B и C, что позволяет столбцу BC иметь более 300 строк? (Я бы хотел решение на основе формул, а не VBA, если это возможно.)
Ответы:
Вы можете делать то, что вы описываете / иллюстрируете с
Если вы поставите выше в ячейку
D1
и перетащить / заливку вниз,A1
обновит доA2
,A3
и т.д., но параметры замены строк (B$1
,C$1
,B$2
,C$2
и т.д.) не изменятся. Я полагаю, что очевидно, что при этом выполняется подстановкаB1
→ затем выполняется подстановка → результата первого замещения, затем выполняется подстановка → результата второго замещения и т. Д.C1
A1
B2
C2
B3
C3
Это неудобно для пяти замен и быстро становится громоздким для большего количества. Если вы хотите сделать много замен (скажем, до 312), используйте вспомогательные столбцы:
Установите
AA1
наЭто эквивалентно тому
=SUBSTITUTE(A1, B1, C1)
, но он получаетB1
иC1
значение динамически, принимая номер столбца (AA
→ 27) и вычитая 26 (номер столбца столбцаZ
), и используя результат (1) , как номер строки вB
иC
столбцах.Drag / заливкой ,
AA1
чтобыAB1
, таким образом это становитсяи изменения
B1
вAA1
, так что становитсяЭто эквивалентно тому
=SUBSTITUTE(AA1, B2, C2)
, что эквивалентно=SUBSTITUTE(SUBSTITUTE(A1, B1, C1), B2, C2)
.AB1
доLZ1
. Это будет результатомA1
всех замен сB1:C1
наB312:C312
примененные (потому чтоL
это 12-я буква, а 12 × 26 - 312).D1
для того=LZ1
, чтобы отразить результат всех замен.D1
иAA1:LZ1
опустите, насколько у вас есть данные в столбцеA
.источник
Я надеялся на умный способ сделать это, используя формулу с одним массивом, но не смог найти ее (я хотел бы оказаться ошибочным!) Я думаю, что единственный способ сделать это с одной формулой на строку ввода это вкладывать
SUBSTITUTE
функции в соответствии с ответом @ G-Man . К сожалению, эта стратегия не будет работать для 300 замен, поскольку в Excel есть ограничение , заключающееся в том, что функции могут вложить только 64 уровня (или 7 до Excel 2007).Поэтому я думаю, что вам понадобятся вспомогательные столбцы (которые вы всегда можете скрыть, если это поможет с презентацией). Приведенный ниже метод использует более простые формулы, чем G-Man. Он использует несколько вспомогательных ячеек, чем его: один столбец на входную строку × одна строка на замену плюс один:
Начиная с листа, выложенного в соответствии с вашим примером, вставьте пустую строку вверху страницы. Выберите ячейки
F1:H1
, введите формулу=TRANSPOSE(A2:A4)
и нажмите Ctrl+ Shift+ Enter, чтобы она вводилась как формула массива. Вы должны увидеть фигурные скобки вокруг формулы, и ячейки должны заполниться вашими входными строками.В ячейку
F2
введите формулу=SUBSTITUTE(F1,$B2,$C2)
. Скопируйте эту формулу поперек и вниз, чтобы заполнить всеF2:H6
. Ваш желаемый результат появится вF6:H6
.Чтобы получить выходные данные обратно в столбец
D
, выберитеD2:D4
и введите формулу=TRANSPOSE(F6:H6)
. Как и раньше, Ctrl+ Shift+ , Enterтак что работает как формула массива.Это должно легко масштабироваться для большего количества входных строк (используйте больше столбцов) или замен (используйте больше строк); просто отрегулируйте диапазоны соответственно. Если вам на самом деле не нужен ввод и вывод в столбцах, вы можете легко обойтись и без
TRANSPOSE
формул; просто введите свой ввод в верхнем ряду, чтобы начать с.источник
Хотя я знаю, что вам нужно решение на основе формул, я думал, что версия VBA будет полезна для справки, поскольку я не смог найти ее в Интернете:
Для вашего примера вы должны ввести
=MULTISUB(A1,$B$1:$B$5,$C$1:$C$5)
в ячейкуD1
и скопировать его вD3
.Функция принимает строку и два диапазона. Он ищет в строке значения в каждой ячейке в первом диапазоне и заменяет их значениями соответствующих ячеек во втором диапазоне. Если два диапазона не имеют одинаковую форму и размер, он возвращается
#REF
.источник
xxxVals
диапазонов должно быть 1, отчасти потому, что человеку становится намного труднее интерпретировать / понимать правила, если они не изложены рядом. сторона (в одном или другом измерении). В качестве альтернативы (по крайней мере) вы должны очень четко документировать, что ваша функция обрабатывает сначала строки, а затем столбцы (т. Е. Обычный порядок чтения текста страницы для западных языков, таких как английский). … (Продолжение)B5
→C5
( «Nice. Спасибо» → «Хорошо, спасибо») правило подстановки не будет влиять наA3
вход ("Nice! thanks"
) , еслиB1
→C1
( «!» → «и») иB2
→C2
( «&» → «.») Правила применяются в первую очередь (в таком порядке).MULTISUB
пользовательская функция, не входящая в стандартную библиотеку функций Excel. Чтобы это работало, вам нужно включить меню «Разработчик» в Excel и ввести код из ответа в новом модуле в редакторе Visual Basic. Если вы хотите попробовать, Google для "Учебник Excel UDF".