Substituição de intervalos com restrições de célula [fechado]

-1

Tenho centenas de fórmulas que contêm intervalos de células, por exemplo sum(A1:A50) ou sum(A19:BA19) . Como posso substituir o intervalo por células individuais? Por exemplo, sum(A1:A50) se tornaria sum(A1,A2,A3,A4...A49,A50) . Eu tentei escrever uma macro que desce pela maior linha referenciada, procurando por dois-pontos dentro de uma fórmula, mas é muito difícil obter as referências de coluna corretas.

Se isso importa, todas as minhas fórmulas são aninhadas. Significando, eu poderia ter o sum () dentro de um ifferror () e um operador de divisão ou Mod.

Alguém tem alguma idéia, estou procurando uma nova abordagem.

Obrigado.

    
por wizlog 12.09.2017 / 16:03

1 resposta

2

Ficou entediado e foi um bom quebra-cabeça.

Sub rangesplit()
Dim fnlStr As String
Dim strstrt As String
Dim rngsplit() As String
Dim rng As Range
Dim str As Variant
'Change Selection to the range you want. If more than one cell you will need a loop
fnlStr = Selection.Formula
'remove the part before and including the "(" and store in a variable.
strstrt = Left(fnlStr, InStr(fnlStr, "("))
fnlStr = Left(fnlStr, Len(fnlStr) - 1)
fnlStr = Replace(fnlStr, strstrt, "")
'Split the rest on "," in case of multiple ranges.
rngsplit = Split(fnlStr, ",")
'clear fnlstr and start peicing back together
fnlStr = strstrt
'Loop through resultant array
For Each str In rngsplit
    'Check if viable Range
    If Not IsError(Range(str)) Then
        'Loop throug range
        For Each rng In Range(str)
            'Append each address to fnlstr
            fnlStr = fnlStr & rng.Address & ","
        Next rng
    End If
Next str
'remove the extra "," and replace it with ")"
fnlStr = Left(fnlStr, Len(fnlStr) - 1) & ")"
Selection.Formula = fnlStr
End Sub
    
por 12.09.2017 / 17:22