Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: gtz от 12 января 2018, 08:55

Название: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: gtz от 12 января 2018, 08:55
Доброе утро!
В представленной ниже формуле в адресе ячейки 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 )
Название: Re: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: Администратор от 12 января 2018, 11:26
Все ваши ошибки я не стал смотреть, сделал сам с самого начала. Посмотрите сами, в чём отличие между вашим и моим решением.
Если в формуле используется кавычка, то нужно вместо одной кавычки напечатать две.
Символы "_" я использовал, чтобы было видно код макроса, чтобы код макроса не заходил за пределы монитора.

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
Название: Re: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: gtz от 12 января 2018, 11:34
Я как раз тоже закончил - проблема была в двойных кавычках.
Все работает супер!
Спасибо!
Название: Re: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: Владимир от 20 января 2018, 12:42
Доброго времени суток, никогда не сталкивался с макросами, стало интересно не могли ли Вы помочь с решением одной задачки. Есть Лист с N- ным количеством строк предположим (3000), и определенным количеством столбцов - 15. Требуется вставить формулу в определенные столбцы с интервалом через каждые 16 строк, пробовал так: 

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

но столбцов много и забивать значения вручную тяжело.
Название: Re: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: Администратор от 20 января 2018, 15:10
Макрос
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
[свернуть]
Название: Re: Excel VBA: Как записать в ячейку формулу с помощью макроса?
Отправлено: Владимир от 21 января 2018, 20:00
Благодарю Вас! Очень выручили!