Страницы: 1
RSS
Макросом записать в ячейку формулу, возвращающую написание формулы из другой ячейки и ее расчетное значение.
 
Доброго времени суток, друзья!
Возникла нужда: Макросом записать в ячейку формулу, возвращающую написание формулы из другой ячейки и ее расчетное значение.
В ячейке таблицы, например B2 находится формула: =ОКРУГЛ(0,55*1,75*1,15;3), которая возвращает значение, равное 1,107
нужно в активной ячейке, скажем D2, запустить макрос, по Ctrl+f:
Код
Sub FormulaPlusZnacenie()
'
' FormulaPlusZnacenie Макрос
' В ячейку записывается формула и ее расчет. Возвращает формулу и рассчитанное ее значение.
'
' Сочетание клавиш: Ctrl+f
'
    Dim fRZn As String

    fRZn = InputBox("1. Скопируйте в буфер содержащуюся в ячейке формулу;" & Chr(10) & _
                    "2. Выберите ячейку, в которую нужно вставить формулу и ее расчетное значение;" & Chr(10) & _
                    "3. Запустите <Ctrl + f> данный макрос и в окно ввода вставте содержимое буфера.", "Скопируйте из буфера:")

    'ActiveCell.FormulaR1C1 = "=TEXT(""ОКРУГЛ(0,55*1,75*1,15;3)"","""")&"" = ""&ROUND(0.55*1.75*1.15,3)"
    
    ActiveCell.FormulaR1C1 = "=TEXT(" & Chr(34) & fRZn & Chr(34) & "," & Chr(34) & Chr(34) & ")&"" = " & Chr(34) & fRZn
    
End Sub
на этой строке
Код
ActiveCell.FormulaR1C1 = "=TEXT(" & Chr(34) & fRZn & Chr(34) & "," & Chr(34) & Chr(34) & ")&"" = " & Chr(34) & fRZn
выдает ошибку. Может кто подскажет, что не так?
Изменено: Григорий Калюга - 27.08.2025 21:15:57
 
Григорий Калюга, добрый вечер. Может так? (функция взята https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=24328)
Код
Sub FormulaPlusZnacenie()
'
' FormulaPlusZnacenie Макрос
' В ячейку записывается формула и ее расчет. Возвращает формулу и рассчитанное ее значение.
'
' Сочетание клавиш: Ctrl+f
'
    Dim fRZn As String
 
    fRZn = InputBox("1. Скопируйте в буфер содержащуюся в ячейке формулу;" & Chr(10) & _
                    "2. Выберите ячейку, в которую нужно вставить формулу и ее расчетное значение;" & Chr(10) & _
                    "3. Запустите <Ctrl + f> данный макрос и в окно ввода вставте содержимое буфера.", "Скопируйте из буфера:")
 
    'ActiveCell.FormulaR1C1 = "=TEXT(""ОКРУГЛ(0,55*1,75*1,15;3)"","""")&"" = ""&ROUND(0.55*1.75*1.15,3)"
    Dim g
    g = EvalLocal("=" & fRZn)
    ActiveCell.FormulaLocal = "=" & Chr(34) & fRZn & """ " & "=" & g
     
End Sub

Function EvalLocal(FormulaLocal As String, Optional Sh As Worksheet)
 If Sh Is Nothing Then Set Sh = ActiveSheet
 With Sh.Names.Add("My.Temporary.Name", RefersToLocal:=FormulaLocal)
   EvalLocal = Evaluate(.RefersTo)
   .Delete
 End With
End Function
Изменено: Alex - 27.08.2025 22:13:22
 
Что-то этот трюк не работает у меня.

Задача такая: в интерфейсе с настройками (msForms) дать пользователю возможность задать параметр с использованием привычных ему формул Excel на "человеческом" языке. К примеру, в поле Параметр1 пользователь может написать СУММ(Лист1!A1;Лист1!A2), а программа должна преобразовать это в нативный формат и вычислить с помощью Evaluate.

Использовать для этого временную ячейку на листе кажется не очень правильным, а с именами какая-то странность: то ошибка 1004 при добавлении имени, то имя добавляется, но RefersTo отдает то же самое, что хранит RefersToLocal, хотя при этом преобразование из A1 в R1C1 работает.

Кажется, при добавлении любой экселевской формулы в RefersToLocal эксель считает, что вся строка с формулой неправильная.

Поиск по форуму и гуглам открывает некоторые нюансы:

Microsoft сообщает о проблемах с RefersToLocal
Пользователи пишут, что иногда приходится пошаманить со свойством Comment

Все перепробовал, не помогает. Файл с примером во вложении.

P.S.
Офис 2021, версия Excel 2108, 64-разрядная
Изменено: dhead - 28.12.2025 21:08:23
Страницы: 1
Читают тему
Наверх