Colega XLArruda, bom dia
Uma maneira de fazer seria com uma UDF usando a propriedade .Text do Range, ao invés de .Value, já que traz o conteúdo conforme a célula está formatada.
Exemplo:
Function SomaSóNúm(rg As Range) As Double
Dim cél As Range, conteúdo As Variant
For Each cél In rg
On Error Resume Next
conteúdo = cél.Text
If conteúdo Like "*%" And IsNumeric(cél.Value) Then conteúdo = cél.Value
SomaSóNúm = SomaSóNúm + conteúdo
On Error GoTo 0
Next cél
End Function
O tratamento da porcentagem é porque esta não seria considerada na soma se não pegar pelo valor. Já valores em notação científica e monetários são somados normalmente, sem tratar. Se quiser que a função some valores lógicos (0 e 1 para Falso e Verdadeiro), tem que fazer mais uma condição if para isso.
O tratamento de erro é porque, quando a célula é tipo data o conteúdo fica sendo uma string e, gerando erro ao somar, acaba sendo ignorada na soma.
Muitos puristas não gostam de tirar proveito do uso dessa técnica de tratamento de erros, argumentando que tratamentos de erros deveriam ser só para erros imprevisíveis. Nesse caso acima, precisaria então analisar caso a caso todas as formas de separadores de data além da barra, como hífen, ponto, espaço...
Postado : 17/02/2018 9:34 am