如何在 Excel 中一次替换多个字符串?
How can I replace multiple string at once in Excel?
我期待的功能
some_function(original_text, "search_text", "replacement_text")
第二个和第三个参数的值将是多个字符。例如。结果将根据字符在第二个和第三个参数的位置替换字符
some_function("9528", "1234567890", "abcdefghij")
1 -> a
2 -> b
3 -> c
...
8 -> h
9 -> i
0 -> j
some_function
的结果将是 iebh
。嵌套的SUBSTITUTE
函数可以归档目标,但我希望能压缩复杂度。
Function Multi_Replace(Original As String, Search_Text As String, Replace_With As String) As String
'intEnd represents the last character being replaced
Dim intEnd As Long: intEnd = WorksheetFunction.Min(Len(Search_Text), Len(Replace_With))
'necessary if Search text and replace text are different lengths;
Dim intChar As Long 'to track which character we're replacing
'Replace each character individually
For intChar = 1 To intEnd
Original = Replace(Original, Mid(Search_Text, intChar, 1), Mid(Replace_With, intChar, 1))
Next
Multi_Replace = Original
End Function
假设您在 A 列中有一个国家列表,您打算用相应的全名替换所有缩写。您首先在单独的列(分别为 D 和 E)中输入“查找”和“替换”项,然后在 B2 中输入此公式:
=XLOOKUP(A2, $D:$D, $E:$E, A2)
从 Excel 语言翻译成人类语言,公式的作用如下:
在 D2:D4 (lookup_array) 中搜索 A2 值 (lookup_value) 并且 return 来自 E2:E4 (return_array ).如果没有找到,从A2中拉取原始值。
Double-click填充句柄将公式复制到下面的单元格,结果不会让你久等:
由于XLOOKUP函数只在Excel365中可用,所以上面的公式在早期版本中是行不通的。但是,您可以通过组合使用 IFERROR 或 IFNA 和 VLOOKUP 轻松模仿此行为:
=IFNA(VLOOKUP(A2, $D:$E, 2, FALSE), A2)
您描述需求的方式最好通过 REDUCE()
, a lambda-related helper function and recently announced to be in production:
=REDUCE("9528",SEQUENCE(10),LAMBDA(x,y,SUBSTITUTE(x,MID("1234567890",y,1),MID("abcdefghij",y,1))))
这个不用说了,配合cell-references使用会更加生动:
A3
中的公式:
=REDUCE(A1,SEQUENCE(LEN(B1)),LAMBDA(x,y,SUBSTITUTE(x,MID(B1,y,1),MID(C1,y,1))))
另一种更复杂的方式可能是:
=LET(A,9528,B,1234567890,C,"abcdefghij",D,MID(A,SEQUENCE(LEN(A)),1),CONCAT(IFERROR(MID(C,FIND(D,B),1),D)))
或者,按照上面的截图:
=LET(A,A1,B,B1,C,C1,D,MID(A,SEQUENCE(LEN(A)),1),CONCAT(IFERROR(MID(C,FIND(D,B),1),D)))
如果您还没有 lambda,可能会更简单:=TEXTJOIN(,,CHAR(96+MID(A1,SEQUENCE(LEN(A1)),1)))
*请注意,这不会 return 0
作为预期结果。
我期待的功能
some_function(original_text, "search_text", "replacement_text")
第二个和第三个参数的值将是多个字符。例如。结果将根据字符在第二个和第三个参数的位置替换字符
some_function("9528", "1234567890", "abcdefghij")
1 -> a
2 -> b
3 -> c
...
8 -> h
9 -> i
0 -> j
some_function
的结果将是 iebh
。嵌套的SUBSTITUTE
函数可以归档目标,但我希望能压缩复杂度。
Function Multi_Replace(Original As String, Search_Text As String, Replace_With As String) As String
'intEnd represents the last character being replaced
Dim intEnd As Long: intEnd = WorksheetFunction.Min(Len(Search_Text), Len(Replace_With))
'necessary if Search text and replace text are different lengths;
Dim intChar As Long 'to track which character we're replacing
'Replace each character individually
For intChar = 1 To intEnd
Original = Replace(Original, Mid(Search_Text, intChar, 1), Mid(Replace_With, intChar, 1))
Next
Multi_Replace = Original
End Function
假设您在 A 列中有一个国家列表,您打算用相应的全名替换所有缩写。您首先在单独的列(分别为 D 和 E)中输入“查找”和“替换”项,然后在 B2 中输入此公式:
=XLOOKUP(A2, $D:$D, $E:$E, A2)
从 Excel 语言翻译成人类语言,公式的作用如下:
在 D2:D4 (lookup_array) 中搜索 A2 值 (lookup_value) 并且 return 来自 E2:E4 (return_array ).如果没有找到,从A2中拉取原始值。
Double-click填充句柄将公式复制到下面的单元格,结果不会让你久等:
由于XLOOKUP函数只在Excel365中可用,所以上面的公式在早期版本中是行不通的。但是,您可以通过组合使用 IFERROR 或 IFNA 和 VLOOKUP 轻松模仿此行为:
=IFNA(VLOOKUP(A2, $D:$E, 2, FALSE), A2)
您描述需求的方式最好通过 REDUCE()
, a lambda-related helper function and recently announced to be in production:
=REDUCE("9528",SEQUENCE(10),LAMBDA(x,y,SUBSTITUTE(x,MID("1234567890",y,1),MID("abcdefghij",y,1))))
这个不用说了,配合cell-references使用会更加生动:
A3
中的公式:
=REDUCE(A1,SEQUENCE(LEN(B1)),LAMBDA(x,y,SUBSTITUTE(x,MID(B1,y,1),MID(C1,y,1))))
另一种更复杂的方式可能是:
=LET(A,9528,B,1234567890,C,"abcdefghij",D,MID(A,SEQUENCE(LEN(A)),1),CONCAT(IFERROR(MID(C,FIND(D,B),1),D)))
或者,按照上面的截图:
=LET(A,A1,B,B1,C,C1,D,MID(A,SEQUENCE(LEN(A)),1),CONCAT(IFERROR(MID(C,FIND(D,B),1),D)))
如果您还没有 lambda,可能会更简单:=TEXTJOIN(,,CHAR(96+MID(A1,SEQUENCE(LEN(A1)),1)))
*请注意,这不会 return 0
作为预期结果。