我需要以下方面的帮助:
在一个单元格中,我添加了:((0)+(0)+(10))+((13)+(0)+(0))+((0)+(0)+(10))
。
我只想添加每个外括号中的第三个括号,这样总数就会是 20。
你们对这种方法有什么建议吗?
答案1
这是一个 VBA 宏作为解决方案。
对于 excel 公式,使用 Find() 和 Mid() 来处理多个目标会变得非常长且复杂。此外,这里也存在困难,因为加法长度会发生变化。0 是一位数,其他是两位数。
此宏使用活动单元格并添加每个第三个元素(无论括号是否为括号)。最后一行已被注释掉,但可用于将总和插入到工作表中。
Sub sumSplit()
Dim currCell As String
Dim sums As Variant
Dim myTot As Long
Dim myIndex As Long
Dim myString As String
Dim myExit As Boolean
myString = Replace(ActiveCell.Value2, "(", "")
myString = Replace(myString, ")", "")
sums = Split(myString, "+")
myIndex = 2
myTot = 0
myExit = True
Do While myExit
If myIndex <= UBound(sums, 1) Then
myTot = myTot + sums(myIndex)
Else
myExit = False
End If
myIndex = myIndex + 3
Loop
MsgBox myTot
'ActiveCell.Offset(0, 1).Value2 = myTot
End Sub
答案2
=LEFT(RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",4))),FIND(")",RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",4))))-1) + LEFT(RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",8))),FIND(")",RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",8))))-1) + LEFT(RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",12))),FIND(")",RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"(","|",12))))-1)
注意事项 - 如果满足以下条件,此方法有效:
- 在每一组外括号中,始终恰好有三组内括号,如示例所示
((...)...(...)...(...))
- 第三个内括号包含一个数字,而不是一个计算结果为数字的表达式;可以有空格
( 2 )
- 外括号恰好有三组
((1)+(11)+(111))+((2)+(22)+(222))+((3)+(33)+(333))
如果引用单元格包含公式,则用 FORMULATEXT 将每个单元格引用括起来FORMULATEXT(A2)
。如果有时是公式,有时是文本,则使用IFERROR(FORMULATEXT(A2),A2)
。
编辑:
这项改进消除了第三个警告,即现在可以有 0 到 1000 个外括号三元组(将两个1000
s 编辑为所需的限制的相同值)。
=SUM( IFERROR( NUMBERVALUE( LEFT( RIGHT( A2, LEN(A2) - FIND( "|", SUBSTITUTE( A2, "(", "|", ROW($A$1:$A$1000)*4))), FIND( ")", RIGHT( A2, LEN(A2) - FIND( "|", SUBSTITUTE( A2, "(", "|", ROW($A$1:$A$1000)*4)))) - 1)), 0))
此改进是一个数组公式,因此按Ctrl- Shift-Enter输入。