Страницы: 1
RSS
Как в коде VBA записать название диапазона, в котором неизвестен адрес строки
 
Уважаемые знатоки! Прошу вашей помощи! Я совсем не разбираюсь в макросах, но очень надо. Прошу не смеяться и не бить меня ногами)) Мне нужно сделать код типа:
Код
For Each Cell In Range("D35:D44")     
If IsEmpty(Cell) Then Cell.Value = "без кромки"     
Next Cell 
End Sub 

То есть нужно, чтобы пустые ячейки в столбце D заполнились "без кромки". Проблема в том, что диапазон меняется в зависимости от количества вставленных строк. То есть известен столбец=D, а вот его строка может быть не 35, а больше. Как это реализовать формулой я понимаю
Код
=ПОИСКПОЗ("Итого Фасады";B:B;0)+8
здесь у меня от названия строки предыдущей таблицы отсчитывается +8 строк и получается номер строки для этого диапазона. Так же и для нижней границы диапазона
Код
=ПОИСКПОЗ("Итого МДФ панель (шпон с 2х сторон)";B:B;0)-2

Как я себе представляю это нужно задать через переменные:
Код
Set x =  
Set y =  For Each cell In Range(Cells(x, 4), Cells(y, 4)) 
If IsEmpty(cell) Then cell.Value = "без кромки" 
Next cell 
End Sub 

Как правильно прописать эти переменные, чтобы работало? Пыталась записать макрос вручную через формулу и подставить в код, но получается фигня и не работает.
Код
Set x = "=MATCH(""Итого Фасады"",C[-2],0)+8" 
Set y = "=MATCH(""Итого МДФ панель (шпон с 2х сторон)"",C[-2],0)-2" 
For Each cell In Range(Cells(x, 4), Cells(y, 4)) 
If IsEmpty(cell) Then cell.Value = "без кромки" 
Next cell 
End Sub 

Заранее благодарю!!! Пример прикладываю.
Изменено: vikttur - 13.06.2021 17:23:19
 
Наталья Шалаева, объясните задачу просто словам без ваших знаний формул и макросов, просто что есть вот это, а хочу получить вот это (покажите желаемый результат рядом или на другом листе)  быстрее получите помощь
Не бойтесь совершенства. Вам его не достичь.
 
Код
Sub test()
    Dim i&, s&, lr&
    For i = 10 To Cells(Rows.Count, 2).End(xlUp).Row
        If Cells(i, 2).Value = "Итого Фасады" Then s = i + 8
        If Cells(i, 2).Value = "Итого МДФ панель (шпон с 2х сторон)" Then lr = i - 2
    Next
    For i = s To lr
        If Cells(i, 4) = "" Then Cells(i, 4) = "без кромки"
    Next
End Sub
 
Цитата
диапазон меняется в зависимости от количества вставленных строк.
Код
Sub Poisk_kromka()
Dim i As Long
Dim Found_kromka As Range
Dim Found_Itogo As Range
Dim FRow As Long
Dim ERow As Long
  Set Found_kromka = Columns("D").Find("Кромка", , xlValues, xlWhole)
    If Not Found_kromka Is Nothing Then
        FRow = Found_kromka.Row + 1
        Set Found_Itogo = Columns("B").Find("Упаковка", Found_kromka.Offset(, -2), xlValues, xlWhole)
          ERow = Found_Itogo.Row - 1
            'определили строки начала и конца диапазона и делаем цикл
            For i = FRow To ERow
              If Cells(i, "D") = "" Then
                Cells(i, "D") = "без кромки"
              End If
            Next
    End If
End Sub
Страницы: 1
Наверх