Excel заменить с помощью формулы - PullRequest
2 голосов
/ 02 августа 2020

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

URL-адрес изображения : домен. com / images / products / 63/63/19787/2/279 / image-name.jpg

Текст, который мне нужно было удалить: 279 / . Но мне нужно удалить его именно в том месте, как domain.com / xxx / xxx / xxx / xxx / xxx / x / 279 / image-name.jpg между URL-адресом и именем изображения.

Я попытался сначала разделить его с помощью этой формулы

=MID(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),LEN(A1))

Результат после того, как я использовал формулу

/ 279 / image-name.jpg

, и я попытался использовать формулу замены для замены текста из другого текста ячейки. До этого я удалил / 279 из результата, так что теперь это единственный /image-name.jpg.

=REPLACE(A1, FIND(B1,A1), 4, C1)

Но он продолжает давать мне двойной результат в конце текста, как это

введите описание изображения здесь

domain.com / images / products / 63/63/19787/2 / image-name.jpg / image-name.jpg

результат должен быть

domain.com / images / products / 63/63/19787/2 / image-name.jpg - без 279 /

есть ли проблемы с Заменить формулу? или есть какая-нибудь другая более простая формула, чтобы заставить его работать?

Ответы [ 3 ]

2 голосов
/ 02 августа 2020

Чтобы найти расположение предпоследнего sla sh:

=FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1))

Если содержимое этого узла всегда будет состоять из трех символов, вы можете использовать replace:

=REPLACE(A1,FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),"")

Если содержимое этого узла будет переменным числом символов, то сначала мы возвращаем часть до этого узла и объединяем его с последним узлом:

=LEFT(A1,FIND(CHAR(1),LEFT(SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1),99))) &
TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99))

EDIT Logi c добавлено, чтобы гарантировать, что предпоследний узел равен 279

Если вам нужно подтвердить, что предпоследний узел содержит 279, вы можете проверить это с:

=ISNUMBER(N(FIND("/279/",MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),99))=1))

Использование этого как части IF вернет исходную строку, если 279 не является содержимым этого узла, и заменит ее, только если это:

=IF(ISNUMBER(N(FIND("/279/",MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),99))=1)),
LEFT(A1,FIND(CHAR(1),LEFT(SUBSTITUTE(A1,"/",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1),99))) &
TRIM(RIGHT(SUBSTITUTE(A1,"/",REPT(" ",99)),99)),A1)
2 голосов
/ 02 августа 2020

Если у вас есть доступ к TEXTJOIN, используйте:

=TEXTJOIN("/",,FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s[not(position() = last()-1)]"))

И если вам нужно проверить, равно ли он '279' перед удалением:

=TEXTJOIN("/",,FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s[not(position() = last()-1 and .='279')]"))

Если у вас нет доступа к TEXTJOIN, тогда у вас есть прекрасная альтернатива от @ RonRosenfeld.

Другой вариант - использовать REPLACE():

=REPLACE(A1,FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))))-FIND("|",SUBSTITUTE(A1,"/","|",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),"")
1 голос
/ 02 августа 2020

Вы хотите использовать функцию SUBSTITUTE().

Приведенная ниже строка находит «/279/image-name.jpg» и заменяет ее на «/image-name.jpg». Добавленный /image-name.jpg гарантирует, что другие экземпляры /279 останутся неизменными.

A1 value = "domain.com/images/products/63/63/19787/2/279/image-name.jpg"

=SUBSTITUTE(A1,"/279/image-name.jpg","/image-name.jpg")

вывод:

domain.com/images/products/63/63/19787/2/image-name.jpg
...