Честно скажу, что автоматизировать такую задачу никогда не было желания. Сложные формулы писал небольшими фрагментами, включающие одну или две функции. Так проще проверить их работу. Потом эти фрагменты объединял в одну формулу. Думаю, так делает большинство. Желание автоматизировать объединение фрагментов формул пришло Руслану (Russel). Свой вопрос он разместил на форуме “МИР MS EXCEL” и “ПЛАНЕТА EXCEL”. Почитав темы, увидел, что представленный на форумах алгоритм очень сложный, совсем не такой, какой использую при объединении. Я объединяю “с конца”, последовательно меняя ссылки на фрагменты формул. Задача заинтересовала (спасибо Руслану), и захотелось реализовать этот алгоритм в коде VBA. Вот что получилось. Макрос собирает фрагменты, а также константы (числовые и текстовые), если это необходимо, в одну формулу. [vba]
Код
Sub Formula() Dim i As Long, iFormula As String Set rg = Selection For i = rg.Count To 1 Step -1 iFormula = IIf(i = rg.Count, rg.Item(i).Formula, Replace(iFormula, rg.Item(i).Address(0, 0), _ IIf(Left(rg.Item(i).Formula, 1) = "=", Mid(rg.Item(i).Formula, 2), _ IIf(IsNumeric(rg.Item(i)), rg.Item(i), """" & rg.Item(i) & """")))) Next i rg.Item(rg.Count + 1).Formula = iFormula End Sub
[/vba] Как работает. Надо выделить все ячейки, содержащие фрагменты формулы и запустить макрос. Объединенная формула будет вставлена в первой строке под выделенным диапазоном. Тема с описанием идеи
Честно скажу, что автоматизировать такую задачу никогда не было желания. Сложные формулы писал небольшими фрагментами, включающие одну или две функции. Так проще проверить их работу. Потом эти фрагменты объединял в одну формулу. Думаю, так делает большинство. Желание автоматизировать объединение фрагментов формул пришло Руслану (Russel). Свой вопрос он разместил на форуме “МИР MS EXCEL” и “ПЛАНЕТА EXCEL”. Почитав темы, увидел, что представленный на форумах алгоритм очень сложный, совсем не такой, какой использую при объединении. Я объединяю “с конца”, последовательно меняя ссылки на фрагменты формул. Задача заинтересовала (спасибо Руслану), и захотелось реализовать этот алгоритм в коде VBA. Вот что получилось. Макрос собирает фрагменты, а также константы (числовые и текстовые), если это необходимо, в одну формулу. [vba]
Код
Sub Formula() Dim i As Long, iFormula As String Set rg = Selection For i = rg.Count To 1 Step -1 iFormula = IIf(i = rg.Count, rg.Item(i).Formula, Replace(iFormula, rg.Item(i).Address(0, 0), _ IIf(Left(rg.Item(i).Formula, 1) = "=", Mid(rg.Item(i).Formula, 2), _ IIf(IsNumeric(rg.Item(i)), rg.Item(i), """" & rg.Item(i) & """")))) Next i rg.Item(rg.Count + 1).Formula = iFormula End Sub
[/vba] Как работает. Надо выделить все ячейки, содержащие фрагменты формулы и запустить макрос. Объединенная формула будет вставлена в первой строке под выделенным диапазоном. Тема с описанием идеиAlexM