如何在 Excel 中的不同字符之间进行子串?
How to substring in Excel between different characters?
第一次发帖,还请多多包涵。我试图说服 Excel 做一个子字符串,但惨遭失败。这个任务表面上很简单,提取一组固定字符(+、-、* 和 /)之间的文本,基本上是数学运算符。
我的输入字符串如下所示:
A+B+C+D
现在,如果我的字符串看起来像那样,或者像 A-B-C-D,一切都很好,我可以使用它并且它有效(不是我的代码,在 https://exceljet.net/formula/split-text-with-delimiter 上找到并根据我的需要进行了修改:
First text: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),0*LEN($A2)+1,LEN($A2)))
Second: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),1*LEN($A2)+1,LEN($A2)))
Third: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),2*LEN($A2)+1,LEN($A2)))
Forth: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),3*LEN($A2)+1,LEN($A2)))
一切都很好,直到我有一个像这样的字符串:A-B+C-D 或 wahtever 组合,基本上不是所有相同的字符。
我尝试在不同的配置中使用“查找”和“搜索”,但我总是遇到同样的问题:
- 使用替代给了我第 n 次出现,这并不好,因为 - 可能是我的第二个或第三个符号
- 无法像 Nr 那样动态准确地计算 MID 的长度。字符,而不是“直到”
出于安全原因,我不能使用 VB 脚本,所以我一直在尝试使用 Excel 公式。
它必须是一个公式,因为最后,它是一个更大的公式的一部分,就像这样:
CONCATENATE(IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)))
所以我在一个单元格中输入,我的结果必须在相邻的单元格中进行所有处理。
提前谢谢你,到这里就结束了。
你可以试试FILTERXML()
函数。
=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"+","|"),"-","|"),"*","|"),"/","|"),"|","</s><s>")&"</s></t>","//s"))
如果您不在 Excel365
上,请尝试以下公式。
=FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A1,"+","|"),"-","|"),"*","|"),"/","|"),"|","</s><s>")&"</s></t>","//s[" & COLUMN(A1) &"]")
要学习 FILTERXML()
从@JvdV
学习
对于 Excel 的较低版本,可以根据需要复制以下公式:
=TRIM(MID(SUBSTITUTE(" "&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A1,"+"," "),"-"," "),"/"," "),"*"," ")," ",REPT(" ",99)),99*COLUMNS($A1:A1),99))
这与 Exceljet 网站上发布的内容非常相似。
第一次发帖,还请多多包涵。我试图说服 Excel 做一个子字符串,但惨遭失败。这个任务表面上很简单,提取一组固定字符(+、-、* 和 /)之间的文本,基本上是数学运算符。 我的输入字符串如下所示:
A+B+C+D
现在,如果我的字符串看起来像那样,或者像 A-B-C-D,一切都很好,我可以使用它并且它有效(不是我的代码,在 https://exceljet.net/formula/split-text-with-delimiter 上找到并根据我的需要进行了修改:
First text: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),0*LEN($A2)+1,LEN($A2)))
Second: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),1*LEN($A2)+1,LEN($A2)))
Third: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),2*LEN($A2)+1,LEN($A2)))
Forth: TRIM(MID(SUBSTITUTE($A2,"+",REPT(" ",LEN($A2))),3*LEN($A2)+1,LEN($A2)))
一切都很好,直到我有一个像这样的字符串:A-B+C-D 或 wahtever 组合,基本上不是所有相同的字符。 我尝试在不同的配置中使用“查找”和“搜索”,但我总是遇到同样的问题:
- 使用替代给了我第 n 次出现,这并不好,因为 - 可能是我的第二个或第三个符号
- 无法像 Nr 那样动态准确地计算 MID 的长度。字符,而不是“直到”
出于安全原因,我不能使用 VB 脚本,所以我一直在尝试使用 Excel 公式。 它必须是一个公式,因为最后,它是一个更大的公式的一部分,就像这样:
CONCATENATE(IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)),IF(ISNUMBER(A),A,VLOOKUP(A)))
所以我在一个单元格中输入,我的结果必须在相邻的单元格中进行所有处理。 提前谢谢你,到这里就结束了。
你可以试试FILTERXML()
函数。
=TRANSPOSE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"+","|"),"-","|"),"*","|"),"/","|"),"|","</s><s>")&"</s></t>","//s"))
如果您不在 Excel365
上,请尝试以下公式。
=FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A1,"+","|"),"-","|"),"*","|"),"/","|"),"|","</s><s>")&"</s></t>","//s[" & COLUMN(A1) &"]")
要学习 FILTERXML()
从@JvdV
对于 Excel 的较低版本,可以根据需要复制以下公式:
=TRIM(MID(SUBSTITUTE(" "&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE($A1,"+"," "),"-"," "),"/"," "),"*"," ")," ",REPT(" ",99)),99*COLUMNS($A1:A1),99))
这与 Exceljet 网站上发布的内容非常相似。