Как заменить символ в N позициях в строке в ячейке Google Sheets? - PullRequest
0 голосов
/ 12 октября 2019

У меня есть длинная строка символов в ячейке A1:

sdfhgt9|ft8yy|1gftre|78hedd

В ячейке A2 у меня есть набор чисел, разделенных запятыми, чтобы указать позиции для замены символа в ячейке:

4,10,19,26

Символы в этих позициях должны быть заменены на «#», поэтому вывод должен выглядеть следующим образом:

sdf#gt9|f#8yy|1gft#e|78he#d

Я попытался использовать функцию замены с формулой массива.

=ARRAYFORMULA(replace(A1,split(A2,","),1,"#"))

создает эти 4 разные строки в A3, A4, A5, A6:

sdf#gt9|ft8yy|1gftre|78hedd 
sdfhgt9|f#8yy|1gftre|78hedd  
sdfhgt9|ft8yy|1gft#e|78hedd 
sdfhgt9|ft8yy|1gftre|78he#d

Теперь я не могу присоединиться и построить одну строку со всеми 4 "#" заменами.

Я смотрю на решение этой проблемы с помощью обычных функций в Sheets, без пользовательского кодирования.

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

вы можете строить на том, что вам нравится:

=ARRAYFORMULA(JOIN("|", HLOOKUP(COLUMN(A:D), {COLUMN(A:D); 
 SPLIT(TRANSPOSE(REPLACE(A1, SPLIT(A2, ","), 1, "#")), "|")}, 1+COLUMN(A:D))))

0

или полностью динамический:

=ARRAYFORMULA(JOIN("|", HLOOKUP(
 TRANSPOSE(ROW(INDIRECT("A1:A"&COLUMNS(SPLIT(A1, "|"))))), {
 TRANSPOSE(ROW(INDIRECT("A1:A"&COLUMNS(SPLIT(A1, "|"))))); 
 SPLIT(TRANSPOSE(REPLACE(A1, SPLIT(A2, ","), 1, "#")), "|")}, 1+
 TRANSPOSE(ROW(INDIRECT("A1:A"&COLUMNS(SPLIT(A1, "|"))))))))
0 голосов
/ 12 октября 2019

Посмотрите, работает ли это

=regexreplace(A1, "^(.{3}).(.{5}).(.{8}).(.{6}).", "$1#$2#$3#$4#")

Или, если вы хотите использовать содержимое ячейки A2

=join("",ArrayFormula(if(regexmatch(row(indirect("A1:A"&len(A1)))&"", "\b"&SUBSTITUTE(A2, ",", "|")&"\b"), "#", transpose(split(regexreplace(A1, "(.)", "$1-"), "-")))))
...