-1

Мне нужна помощь со следующим, пожалуйста:
В одной ячейке у меня есть дополнение: ((0)+(0)+(10))+((13)+(0)+(0))+((0)+(0)+(10))
Я хотел бы добавить только третью круглую скобку от каждой внешней круглой скобки, чтобы итоговое значение дало бы мне 20.
Ребята, у вас есть предложения по этому подходу.

2 ответа2

0

=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, чтобы ввести его.

0

Вот макрос 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .