Страницы: 1
RSS
Доработка макроса по поиску нужного столбца на листе и вставке в него формулы.
 
Ищу четвертый день решение в интернете, к сожалению не получается.
Я начинающий в программировании VBA, прошу быть по снисходительнее, пожалуйста.

На активном листе следующий макрос:
Код
Sub Вставка_формулы_в_область()
' Поиск
    Cells.Find(What:="столб").Activate
'вставка формулы в выделенную область
    ActiveCell.Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row).FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub

ищет слово "столб" и проставляет формулу в столбце до последней строки, где есть данные, анализируя столбец "А".

Суть проблемы в том, что от первой строки до строки в которой находится слово "столб" есть пропущенные строки, их я удалить не могу (нужны в процессе работы), так вот макрос проставляет формулу в столбце ниже ровно на столько сколько я отступил сверху строк, т.е. выходит за нужный мне диапазон.
И не получается поставить "If" в совокупе с "MxBox" для вывода окошка "заголовок "столбец" не найден"

Буду очень признателен за помощь.
Изменено: murad.v.mir - 06.09.2019 12:28:52 (Увидел что код заключается в скобки)
 
Код
Sub Вставка_формулы_в_область()
Dim iCl As Range, iRow&
With ActiveSheet
    lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set iCl = .UsedRange.Find("столб")
    If Not iCl Is Nothing Then
        iCl.Offset(1).Resize(lRow - iCl.Row).FormulaR1C1 = "=RC[-2]+RC[-1]"
    Else
        MsgBox "Столбец 'столб' не найден!", vbCritical
        Exit Sub
    End If
End With
End Sub
А вообще, вставлять макросом формулы это не комильфо  ;)
Считайте нужное в самом коде, а на лист выгружайте готовые значения
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
А вообще, вставлять макросом формулы это не комильфо  
Огромнейшее Вам СПАСИБО! то что нужно.
а по поводу вставлять формулу, я не нашёл ничего иного как вставив формулу следом вставить только её значения, внизу код.
Как вы считаете это рациональное решение..?
Большое спасибо за помощь..!
Код
Sub вставка_формулы2()
Dim iCl As Range, iRow&
With ActiveSheet
    lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set iCl = .UsedRange.Find("столб")
    If Not iCl Is Nothing Then
        iCl.Offset(1).Resize(lRow - iCl.Row).FormulaR1C1 = "=RC[-2]+RC[-1]"
`вот моё решение
        iCl.Offset(1).Resize(lRow - iCl.Row).Activate
            For Each ar In Selection.Areas
            ar.Value = ar.Value
            Next ar
    Else
        MsgBox "Заголовок `столб`не найден!", vbCritical
        Exit Sub
    End If
End With
End Sub
Изменено: murad.v.mir - 06.09.2019 14:07:32
 
Цитата
murad.v.mir написал: вставив формулу следом вставить только её значения
Тогда лучше так, без цикла по ячейкам
Код
Sub Вставка_формулы_в_область()
Dim iCl As Range, iRow&
With ActiveSheet
    lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set iCl = .UsedRange.Find("столб")
    If Not iCl Is Nothing Then
        With iCl.Offset(1).Resize(lRow - iCl.Row)
            .FormulaR1C1 = "=RC[-2]+RC[-1]"
            .Value = .Value
        End With
    Else
        MsgBox "Столбец 'столб' не найден!", vbCritical
        Exit Sub
    End If
End With
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Тогда лучше так, без цикла по ячейкам
Многоуважаемый Sanja при много  благодарен Вам.
Вы мне очень сильно помогли..!
Дай Бог Вам здоровья.
Страницы: 1
Наверх