Как объединить несколько вложенных замещающих функций в Excel?
Я пытаюсь настроить функцию для форматирования строки, которая позже будет конкатенирована. Пример строки будет выглядеть так:
Standard_H2_W1_Launch_123x456_S_40K_AB
Хотя иногда "S" не существует, а иногда "40K" - "60K" или нет, а "_AB" также может быть "_CD" или "EF". Наконец, все подчеркивания должны быть заменены на дефисы. Конечный продукт должен выглядеть следующим образом:
Standard-H2-W1-Launch-123x456-
У меня есть четыре функции, которые, если они выполнялись один за другим, позаботятся обо всем этом:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_")
=SUBSTITUTE(SUBSTITUTE(B2,"_40K",""),"_60K","")
=SUBSTITUTE(C2,"_S_","_")
=SUBSTITUTE(D2,"_","-")
Я пробовал несколько способов объединить их в одну функцию, но я относительно новичок в этом уровне excel, поэтому я в недоумении. Есть ли способ объединить все это, чтобы он выполнял одну команду за другой в одной ячейке?
Ответы
Ответ 1
Чтобы просто объединить их, вы можете разместить их вместе следующим образом:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"_AB","_"),"_CD","_"),"_EF","_"),"_40K",""),"_60K",""),"_S_","_"),"_","-")
(обратите внимание, что это может передать более старый предел Excel из 7 вложенных операторов. Я тестирую в Excel 2010
Другой способ сделать это - использовать функции Left
и Right
.
Это предполагает, что изменяющиеся данные на конце всегда присутствуют и имеют длину 8 символов
=SUBSTITUTE(LEFT(A2,LEN(A2)-8),"_","-")
Это приведет к той же результирующей строке
Если строка не всегда заканчивается 8 символами, которые вы хотите удалить, вы можете найти "_S" и получить текущее местоположение. Попробуйте следующее:
=SUBSTITUTE(LEFT(A2,FIND("_S",A2,1)),"_","-")
Ответ 2
Я бы использовал следующий подход:
=SUBSTITUTE(LEFT(A2,LEN(A2)-X),"_","-")
где X
обозначает длину вещей, которые вы не после. И для X
я бы использовал
(ISERROR(FIND("_S",A2,1))*2)+
(ISERROR(FIND("_40K",A2,1))*4)+
(ISERROR(FIND("_60K",A2,1))*4)+
(ISERROR(FIND("_AB",A2,1))*3)+
(ISERROR(FIND("_CD",A2,1))*3)+
(ISERROR(FIND("_EF",A2,1))*3)
Приведенный выше ISERROR(FIND("X",.,.))*x
будет возвращать 0, если X
не найден и X
(длина X
), если он найден. Так что технически вы обрезаете A2
справа с возможными совпадениями.
Преимущество такого подхода над другим, упомянутым выше, заключается в том, что более очевидно, что происходит замена (или удаление), поскольку "подстановка" не является вложенной.
Ответ 3
Спасибо за идею разрушения формулы Вернера!
Использование Alt + Enter позволяет поместить каждый бит сложной формулы-заменителя на отдельные строки: им становится легче следовать и автоматически выстраиваться в линию при нажатии Enter.
Просто убедитесь, что у вас достаточно конечных операторов, чтобы соответствовать количеству строк substitute(
с обеих сторон ссылки на ячейку.
Как в этом примере:
=
substitute(
substitute(
substitute(
substitute(
B11
,"(","")
,")","")
,"[","")
,"]","")
становится:
=
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(
SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
который отлично работает как есть, но всегда можно удалить лишние абзацы вручную:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B12,"(",""),")",""),"[",""),"]","")
Имя > substitute()
[Американское Самоа] > Американское Самоа