Excel VBA: Как записать в ячейку формулу с помощью макроса?

Автор gtz, 12 января 2018, 08:55

gtz

Доброе утро!
В представленной ниже формуле в адресе ячейки H3 необходимо заменить цифровой индекс на переменную lr:
=ЕСЛИОШИБКА(СЦЕПИТЬ(ПСТР(H3;1;ПОИСК(" ";H3));ПСТР(H3;ПОИСК(" ";H3)+1;1);".";ПСТР(H3;ПОИСК(" ";H3;ПОИСК(" ";H3)+1)+1;1);".");"")

'Эта формлуаПереводит Фамилию Имя Отчество в Фамилию И.О.

Пробую сделать так:
sh_res.Cells(lr, "I").FormulaLocal  = "=ЕСЛИОШИБКА(СЦЕПИТЬ(ПСТР(H" & lr & ";1;ПОИСК(" ";H" & lr & "));ПСТР(H" & lr & ";ПОИСК(" ";H" & lr & ")+1;1);".";ПСТР(H" & lr & ";ПОИСК(" ";H" & lr & ";ПОИСК(" ";H" & lr & ")+1)+1;1);".");"")"

происходит ошибка: Compile Error Expected list Separator or )

Администратор

Все ваши ошибки я не стал смотреть, сделал сам с самого начала. Посмотрите сами, в чём отличие между вашим и моим решением.
Если в формуле используется кавычка, то нужно вместо одной кавычки напечатать две.
Символы "_" я использовал, чтобы было видно код макроса, чтобы код макроса не заходил за пределы монитора.

Sub макрос()
    Dim lr As Long
    lr = 3
    ActiveCell.FormulaLocal = _
        "=ЕСЛИОШИБКА(СЦЕПИТЬ(ПСТР(H" & lr & ";1;ПОИСК("" "";H" & lr & _
        "));ПСТР(H" & lr & ";ПОИСК("" "";H" & lr & ")+1;1);""."";ПСТР(H" & lr & _
        ";ПОИСК("" "";H" & lr & ";ПОИСК("" "";H" & lr & ")+1)+1;1);""."");"""")"
End Sub

gtz

Я как раз тоже закончил - проблема была в двойных кавычках.
Все работает супер!
Спасибо!

Владимир

Доброго времени суток, никогда не сталкивался с макросами, стало интересно не могли ли Вы помочь с решением одной задачки. Есть Лист с N- ным количеством строк предположим (3000), и определенным количеством столбцов - 15. Требуется вставить формулу в определенные столбцы с интервалом через каждые 16 строк, пробовал так: 

Range("M3,M19,M35").FormulaR1C1 = "=RC[-1]/86400"
Range("N3,N19,N35").FormulaR1C1 = "=RC[-3]-RC[-1]"

но столбцов много и забивать значения вручную тяжело.

Администратор

Макрос
Sub макрос()

    Dim i As Long
   
    ' Отключение монитора и пересчёта формул, чтобы ускорить макрос.
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
   
    ' Вставка формул.
    For i = 3 To 3000 Step 16
        Cells(i, "M").FormulaR1C1 = "=RC[-1]/86400"
        Cells(i, "N").FormulaR1C1 = "=RC[-3]-RC[-1]"
    Next i
   
    ' Включение того, что отключили.
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
   
End Sub
[свернуть]

Владимир