vba для цикла для 4 разных столбцов

#excel #vba

#excel #vba

Вопрос:

 Dim I As Long
For I = 2 To lastrow
    If Not IsEmpty(Cells(I, "f")) And IsEmpty(Cells(I, "j")) Then
        Cells(I, "j").Value = "unregister"
    End If
Next I
    
Dim I2 As Long
For I2 = 2 To lastrow
    If IsEmpty(Cells(I2, "f")) Then
        Cells(I2, "i").Value = Cells(I2 - 1, "i").Value    
    End If
Next I2
  

можете ли вы сделать этот код более простым, я хочу скопировать строку выше для 3 разных столбцов, если столбец f пуст

Комментарии:

1. Cells(I2, "i").Value = Cells(I2 - 1, "i", "l").Value — что вы пытаетесь сделать, что это?

Ответ №1:

Вы можете сделать что-то подобное, используя один цикл и Offset(-1, 0) чтобы получить ячейку выше:

 Dim i As Long, ws As Worksheet

Set ws = ActiveSheet

For i = 2 To ws.Cells(ws.Rows.Count, "F").End(xlUp).Row
    With ws.Rows(i)
        If Not IsEmpty(.Columns("F")) Then
            If IsEmpty(.Columns("J")) Then .Columns("J").Value = "unregister"
        Else
            .Columns("I").Value = .Columns("I").Offset(-1, 0).Value
            .Columns("L").Value = .Columns("L").Offset(-1, 0).Value
            'etc
        End If
    End With
Next I2