Дорогие форумчане, подскажите пожалуйста где у меня ошибка. Вроде все делаю по правилам и логике как у всех но почему то не работает.
Код
Sub CopyNames()
Application.ScreenUpdating = False
Dim i, k As Long
For i = 4 To n
For k = 1 To n
shm.Cells(k, 2) = shm.Cells(i, 1)
Next k
i = i + 4
Next i
Application.ScreenUpdating = True
End Sub
Есть два столбца
Начиная с 4 строки каждую пятую строку надо скопировать в столбец B.
Где переменная n берет значение? Второй цикл только мешает
Код
Sub CopyNames()
Dim lRw As Long
Dim i As Long, k As Long
Application.ScreenUpdating = False
With shm
lRw = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = 4 To lRw Step 5
k = k + 1
.Cells(k, 2).Value = .Cells(i, 1).Value
Next i
End With
Application.ScreenUpdating = True
End Sub
Sub CopyNames()
Application.ScreenUpdating = False
Dim i As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
k = 1
For i = 4 To n Step 5
shm.Cells(k, 2) = shm.Cells(i, 1)
k = k + 1
Next i
Application.ScreenUpdating = True
End Sub
1) У вас не определялась переменная n 2) Зачем 2 цикла ? 3) Вот это i=i+4 вообще не понятно к чему ))
А есть возможность этот код использовать для Worksheet_Change? Типа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'Do nothing if more than one cell is changed or content deleted
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim i As Long
n = shm.Cells(shm.Rows.Count, 1).End(xlUp).Row
For i = 4 To n Step 5
If shm.Cells(i, 1) = Target.Address Then MsgBox Target.Address
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
On Error GoTo 0
End Sub
Какого типа там данные? -------------------------------------- Пробник макроса из сообщения #16:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Or IsEmpty(.Value) Then Exit Sub
If Fix((.Row - 4) / 5) = (.Row - 4) / 5 Then MsgBox .Address
End With
End Sub