-1

У меня есть сотни формул, которые содержат диапазоны ячеек, например, sum(A1:A50) или sum(A19:BA19) . Как я могу заменить диапазон отдельными ячейками? Например, sum(A1:A50) станет sum(A1,A2,A3,A4...A49,A50) . Я пытался написать макрос, который спускается по строке с самой высокой ссылкой, ища двоеточие в формуле, но очень трудно получить правильные ссылки на столбцы.

Если это имеет значение, все мои формулы вложены. То есть, у меня может быть sum() внутри ifferror() и оператор деления или мода.

У кого-нибудь есть идеи, я ищу свежий подход.

Спасибо.

1 ответ1

2

Надоело и было хорошей загадкой.

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

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