多个查找括号中的excel函数
我有一个string,我试图转换和分开:
时间(123)(203)
但是有些string有
时间(123)(203)(547)
我试图得到括号内的值,我可以得到:
(MID(A1, FIND("(",A1')+1, FIND(")",A1') − FIND("(",title_edit 'A1) − 1))
这返回123 。 这是伟大的。 我只需要得到所有的数字,以便任何内部括号,等于123 203 547.有没有一个函数,我失踪,或者一个简单的方法来创build?
您可以使用TEXTJOIN()作为数组公式:
=TEXTJOIN(" ",TRUE,LEFT(TRIM(MID(SUBSTITUTE(A1,"(",REPT(" ",999)),999*ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"(","")))),999)),FIND(")",TRIM(MID(SUBSTITUTE(A1,"(",REPT(" ",999)),999*ROW(INDIRECT("1:" & LEN(A1)-LEN(SUBSTITUTE(A1,"(","")))),999))&")")-1))
作为一个数组公式,在退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter来确认。 如果正确完成,则Excel将在公式周围放置{}
。
TEXTJOIN()仅适用于Office 365 Excel订阅。
如果您没有,则将此代码添加到附加到工作簿的模块并使用上述的公式。
Function TEXTJOIN(delim As String, skipblank As Boolean, arr) Dim d As Long Dim c As Long Dim arr2() Dim t As Long, y As Long t = -1 y = -1 If TypeName(arr) = "Range" Then arr2 = arr.Value Else arr2 = arr End If On Error Resume Next t = UBound(arr2, 2) y = UBound(arr2, 1) On Error GoTo 0 If t >= 0 And y >= 0 Then For c = LBound(arr2, 1) To UBound(arr2, 1) For d = LBound(arr2, 1) To UBound(arr2, 2) If arr2(c, d) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c, d) & delim End If Next d Next c Else For c = LBound(arr2) To UBound(arr2) If arr2(c) <> "" Or Not skipblank Then TEXTJOIN = TEXTJOIN & arr2(c) & delim End If Next c End If TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim)) End Function
TEXTJOIN方法将只返回()
之间的那些。 如果你的例子中的常数,总是在前面,你可以使用这个更简单的公式:
=TRIM(SUBSTITUTE(SUBSTITUTE(MID(A1,FIND("(",A1)-1,LEN(A1)),"(",""),")",""))
这将排除第一个(
从输出:
但在这样的事情上: (123) time (203) (547)
它将返回123 time 203 547
,其中TEXTJOIN将返回123 203 547
尝试replace(
没有和没有)(单独),然后将文本应用到以空格作为分隔符的列。
SUBSTITUTE(SUBSTITUTE(B7, "(", ""),")"," ")
= SUBSTITUTE(SUBSTITUTE(TRIM(CLEAN(RIGHT(A1,LEN(A1)-FIND(“”,A1)))),“(”,“”),“)”,“”)
会提供类似的结果,斯科特的答案,我刚刚看到被接受。
它将依赖于使用文本的公式结果列作为其他答案已经build议