Мне нужна помощь со следующим, пожалуйста:
В одной ячейке у меня есть дополнение: ((0)+(0)+(10))+((13)+(0)+(0))+((0)+(0)+(10))
Я хотел бы добавить только третью круглую скобку от каждой внешней круглой скобки, чтобы итоговое значение дало бы мне 20.
Ребята, у вас есть предложения по этому подходу.
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)
.
РЕДАКТИРОВАТЬ:
Это улучшение удаляет третий Caveat, а именно, теперь может быть от 0 до 1000 внешних триплетов, заключенных в скобки (отредактируйте обе 1000
с одинаковым значением любого необходимого предела).
=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, чтобы ввести его.
Вот макрос 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