Como somar os números entre parênteses dentro de uma célula até que uma determinada condição seja atendida? [fechadas]

0

Aqui está o problema, eu tenho um celular, digamos,

WH,QC-NDE(0.75),CHL150-1(5.05),HMCT12P1(1),B-S(0.2),QC-NDE(0.5),TIGPEC05(17.25),SR,CHL150-1(23),HMCT12P1(42),B-S(1.5),QC,QC-H(0.35),QC-NDE(0.75),INSP_FIN(1)

Eu gostaria de adicionar todos os números entre parênteses (parênteses) da esquerda para a direita até atingir o primeiro CHL150-1.

E se houver a palavra "SR" na frente do CHL150-1, adicione 72.

Portanto, para o exemplo acima, o valor retornado será 0,75 + 5,05 = 5,80, como mostrado em negrito.

TIGPEC05(17.25),SR,CHL150-1(23),HMCT12P1(42),B-S(1.5),QC,QC-H(0.35),QC-NDE(0.75),INSP_FIN(1)

The value returned above will be 17.25 + 72 + 23 = 112.25 instead.

E, idealmente, a escolha de qual condição desencadear o final pode ser modificada. (por exemplo, mudar o CHL150-1 para o HMCT12P1)

Gostaria de receber ajuda de qualquer tipo. Prefira fórmula e UDF ou uma mistura de ambos. Obrigado!

    
por hahafwkit 14.09.2018 / 10:05

2 respostas

1

Public Function mysum(source As String, delim As String) As Double
source = "," & source & ","
delim = "," & delim & "("
If InStr(source, delim) > 0 Then
    source = Left(source, InStr(1 + InStr(source, delim), source, ","))
End If
If InStr(source, ",SR,") > 0 Then
    mysum = 72
End If
Do Until InStr(source, "(") = 0
    source = Mid(source, 1 + InStr(source, "("))
    mysum = mysum + Val(source)
    source = Mid(source, InStr(source, ")"))
Loop
End Function

onde

  • source - célula de dados (contendo "WH, QC-NDE (0.75), ..., INSP_FIN (1)")
  • delim - delimiter-terminator ("CHL150-1", "HMCT12P1", ...)

Ambos os parâmetros podem ser endereços de célula e literais.

"SR" e 72 também podem ser convertidos de constantes codificadas para parâmetros (opcionais).

Se você quiser renomear a função, você deve substituir TODAS as ocorrências no código (4 vezes).

    
por 14.09.2018 / 10:58
0

Este método usa a função Split

Option Explicit
Function SumSpecial(str As String) As Double
    Dim V, W
    Dim I As Long
    Dim D As Double
    Const strEnd As String = "CHL150-1"
    Const str72 As String = "SR"

V = Split(str, ",")

I = 0
Do
    W = Split(V(I), "(")
    If UBound(W) = 1 Then
        D = D + Val(W(1))
    End If
    If W(0) = str72 And _
        Split(V(I + 1), "(")(0) = strEnd Then
        D = D + 72
    End If
    I = I + 1
Loop Until W(0) = strEnd

SumSpecial = D

End Function
    
por 14.09.2018 / 15:56