多个查找括号中的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议