Доброе время суток ГУРУ. Как говориться, без ВАС никуда. Появилась задачка разнести данные с одного листа "Цеха" по листам по проставленному значению в колонке Н. Сделал запись макрорекордером, но увы, дальше дело не идет. В файле на вкладке Цеха описано желаемое. Если можно, то макросом без кнопки, при загрузке файла. Заранее благодарен за помощь.
Доброе время суток ГУРУ. Как говориться, без ВАС никуда. Появилась задачка разнести данные с одного листа "Цеха" по листам по проставленному значению в колонке Н. Сделал запись макрорекордером, но увы, дальше дело не идет. В файле на вкладке Цеха описано желаемое. Если можно, то макросом без кнопки, при загрузке файла. Заранее благодарен за помощь.bosika
Private Sub Workbook_Open() Dim lr1&, lr2&, lc&, i&, sh As Worksheet With ThisWorkbook.Sheets("Цеха") lr1 = .Cells(Rows.Count, 2).End(xlUp).Row lc = .Cells(3, Columns.Count).End(xlToLeft).Column On Error Resume Next For i = 4 To lr1 If .Cells(i, "h") <> "" Then Set sh = ThisWorkbook.Sheets("Цех" & .Cells(i, "h")) lr2 = sh.Cells(Rows.Count, 2).End(xlUp).Row + 1 If Err.Number Then Set sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) sh.Name = "Цех" & .Cells(i, "h") lr2 = 3 Err.Clear End If sh.Cells(lr2, 2).Resize(, lc).Value = .Cells(i, 2).Resize(, lc).Value 'Стереть строчку с листа Цеха ' .Cells(i, 2).Resize(, 7).ClearContents End If Next i End With End Sub
[/vba]
bosika, здравствуйте. Вариант макроса: [vba]
Код
Private Sub Workbook_Open() Dim lr1&, lr2&, lc&, i&, sh As Worksheet With ThisWorkbook.Sheets("Цеха") lr1 = .Cells(Rows.Count, 2).End(xlUp).Row lc = .Cells(3, Columns.Count).End(xlToLeft).Column On Error Resume Next For i = 4 To lr1 If .Cells(i, "h") <> "" Then Set sh = ThisWorkbook.Sheets("Цех" & .Cells(i, "h")) lr2 = sh.Cells(Rows.Count, 2).End(xlUp).Row + 1 If Err.Number Then Set sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) sh.Name = "Цех" & .Cells(i, "h") lr2 = 3 Err.Clear End If sh.Cells(lr2, 2).Resize(, lc).Value = .Cells(i, 2).Resize(, lc).Value 'Стереть строчку с листа Цеха ' .Cells(i, 2).Resize(, 7).ClearContents End If Next i End With End Sub
Private Sub Workbook_Open() Dim lr1&, lr2&, lc&, i&, sh As Worksheet, x As Range With ThisWorkbook.Sheets("Цеха") lr1 = .Cells(Rows.Count, 2).End(xlUp).Row lc = .Cells(3, Columns.Count).End(xlToLeft).Column On Error Resume Next For i = 4 To lr1 If .Cells(i, "h") <> "" Then Set sh = ThisWorkbook.Sheets("Цех" & .Cells(i, "h")) lr2 = sh.Cells(Rows.Count, 2).End(xlUp).Row + 1 If Err.Number Then Set sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) sh.Name = "Цех" & .Cells(i, "h") lr2 = 3 Err.Clear End If Set x = sh.Columns(2).Find(.Cells(i, 2), , , xlWhole) If x Is Nothing Then sh.Cells(lr2, 2) = .Cells(i, 2) End If Next i End With End Sub
[/vba]
bosika, так надо? [vba]
Код
Private Sub Workbook_Open() Dim lr1&, lr2&, lc&, i&, sh As Worksheet, x As Range With ThisWorkbook.Sheets("Цеха") lr1 = .Cells(Rows.Count, 2).End(xlUp).Row lc = .Cells(3, Columns.Count).End(xlToLeft).Column On Error Resume Next For i = 4 To lr1 If .Cells(i, "h") <> "" Then Set sh = ThisWorkbook.Sheets("Цех" & .Cells(i, "h")) lr2 = sh.Cells(Rows.Count, 2).End(xlUp).Row + 1 If Err.Number Then Set sh = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) sh.Name = "Цех" & .Cells(i, "h") lr2 = 3 Err.Clear End If Set x = sh.Columns(2).Find(.Cells(i, 2), , , xlWhole) If x Is Nothing Then sh.Cells(lr2, 2) = .Cells(i, 2) End If Next i End With End Sub
Manyasha, Извините, не посмотрел что русский текст не прописался в коде. Работает на УРА. Огромное Вам спасибо. Еще раз извините за мою невнимательность. +
Manyasha, Извините, не посмотрел что русский текст не прописался в коде. Работает на УРА. Огромное Вам спасибо. Еще раз извините за мою невнимательность. +bosika
Начинающий. Много и долго не пинать. Больно однако.