Привет всем, помогите изменить макрос, чтобы строки копировались с первого листа на второй только не при условии что 4-й столбец в 1листе = Россия, а при условии что в 4-м столбце 1-го листа содержится часть слова или часть текста равная "Рос" (на 6-м листе добавил столбцы чтобы было понятно для чего нужно именно так. На список городов не обращайте внимания - там в разнобой все). насколько я понимаю - нужно изменить эту строку: If Mid(Cells(i, 4), 1, 6) = "Россия" Then в макросе:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column = 2 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Not Intersect(Target, Range("E2:E1000")) Is Nothing Then i = Split(Target.Address, "$")(2) LastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If Mid(Cells(i, 4), 1, 6) = "Россия" Then Range("A" & CStr(i) & ":E" & i).Copy Sheets("Лист2").Range("A" & LastRow + 1) End If End If End Sub
[/vba]
И если можно пояснить вообще эту строку, что значат в ней цифры и i
Привет всем, помогите изменить макрос, чтобы строки копировались с первого листа на второй только не при условии что 4-й столбец в 1листе = Россия, а при условии что в 4-м столбце 1-го листа содержится часть слова или часть текста равная "Рос" (на 6-м листе добавил столбцы чтобы было понятно для чего нужно именно так. На список городов не обращайте внимания - там в разнобой все). насколько я понимаю - нужно изменить эту строку: If Mid(Cells(i, 4), 1, 6) = "Россия" Then в макросе:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column = 2 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Not Intersect(Target, Range("E2:E1000")) Is Nothing Then i = Split(Target.Address, "$")(2) LastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If Mid(Cells(i, 4), 1, 6) = "Россия" Then Range("A" & CStr(i) & ":E" & i).Copy Sheets("Лист2").Range("A" & LastRow + 1) End If End If End Sub
[/vba]
И если можно пояснить вообще эту строку, что значат в ней цифры и iKonkruk
Nic70y, Да все работает, спасибо большое. Подскажите, если не сложно, еще вопрос, если в этот макрос добавить еще строку для вставки даты в 11 столбец при заполнении 10 (в оригинале просто столбцов больше), правильно ли будет просто скопировать строку и поменять на 10 значение "2": и надо ли добавлять end if еще? вот так получается: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column = 2 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Target.Column = 10 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Not Intersect(Target, Range("E2:E1000")) Is Nothing Then i = Split(Target.Address, "$")(2) LastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If InStr(Cells(i, 4), "Рос") > 0 Then Range("A" & CStr(i) & ":E" & i).Copy Sheets("Лист2").Range("A" & LastRow + 1) End If End If End Sub
[/vba]
Nic70y, Да все работает, спасибо большое. Подскажите, если не сложно, еще вопрос, если в этот макрос добавить еще строку для вставки даты в 11 столбец при заполнении 10 (в оригинале просто столбцов больше), правильно ли будет просто скопировать строку и поменять на 10 значение "2": и надо ли добавлять end if еще? вот так получается: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Target.Column = 2 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Target.Column = 10 And Target.Row > 1 And Not IsEmpty(Target.Value) And Target.Offset(0, 1).Value = "" Then _ Target.Offset(0, 1).Value = Date If Not Intersect(Target, Range("E2:E1000")) Is Nothing Then i = Split(Target.Address, "$")(2) LastRow = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If InStr(Cells(i, 4), "Рос") > 0 Then Range("A" & CStr(i) & ":E" & i).Copy Sheets("Лист2").Range("A" & LastRow + 1) End If End If End Sub