Страницы: 1
RSS
Копирование строк с выделенными ячейками
 
Уважаемые форумчане, добрый день!  
Скорее всего что-то подобное уже было, но поиском чего-то не нашёл того, что нужно...  
 
есть следующие коды:  
 
Private Sub Worksheet_Change(ByVal Target As Range)  
Dim LastRow As Long  
For Each cell In Target  
stroka = cell.Row  
LastRow = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row + 1  
Rows(stroka).Copy Destination:=Sheets(2).Cells(LastRow, 1)  
Next cell  
End Sub  
 
и  
 
Sub Копирование()  
Dim Target2 As Range  
Dim LastRow As Long  
Set Target2 = Selection.Cells  
For Each cell In Target2  
stroka = cell.Row  
LastRow = Sheets(2).Cells(Rows.Count, 3).End(xlUp).Row + 1  
ActiveSheet.Rows(stroka).Copy Destination:=Sheets(2).Cells(LastRow, 1)  
Next cell  
End Sub  
 
в первом варианте возможно копирование несвязных диапазонов, но данный вариант подходит, как я понял, только для макросов обработки событий...чего-то я не пойму как сделать возможным копирование несвязных диапазонов во втором варианте, чтобы юзер выбирал несколько произвольных ячеек и при нажатии кнопки на рабочем листе происходило копирование строк с этими ячейками на другой лист...в данном варианте возможно копирование только одного диапазона...
 
Где-то уже выкладывал. Посмотрите, можно сохранить как надстройку.
 
VovaK, спасибо, но что-то это по-моему не совсем то...
 
второй - вполне себе рабочий вариант  
 
второй - вполне себе рабочий макрос  
 
Sub pp()  
Dim Target2 As Range  
Dim LastRow As Long  
Dim CELL As Range  
Dim stroka As Integer  
Set Target2 = Selection.Cells  
For Each CELL In Target2  
stroka = CELL.Row  
LastRow = Sheets(2).Cells(Rows.Count, 3).End(xlUp).Row + 1  
ActiveSheet.Rows(stroka).Copy Destination:=Sheets(2).Cells(LastRow, 1)  
Next CELL  
End Sub
 
есть некий перечень продукции, состоящий из, допустим, 1000 позиций...пользователь выбирает несколько штук мышкой, и по нажатию кнопки эти позиции должны скопироваться на другой лист друг под друга, потом он выбирает ещё несколько, и они должны скопироваться под первую партию...и т.д.
 
{quote}{login=The_Prist}{date=18.02.2010 02:14}{thema=}{post}Это не отвечает полностью на мой вопрос:  
"При выделении двух несвязанных диапазонов(A1:D23 и F4:G13) макрос задублирует данные. Как быть? Как тогда вставлять?"{/post}{/quote}  
 
а...понял...  
пользователи выбирают диапазоны, состоящие из одного столбца (напр. А10:А15, А20, А30), и при нажатии кнопки копируются строки полностью (в данном случае должны скопироваться строки 10-15, 20, 30 и встать на другой лист друг под друга)...
 
всё ещё актуально...
 
Данный вариант копирует на второй лист с рассчётом, что там уже хоть одна строка заполнена (иначе отступает 1 строку с начала листа):  
 
Private Sub CommandButton1_Click()  
With Selection  
For Each cc In .Cells  
Set blank_cell = Sheets(2).Cells(Sheets(2).[a1].SpecialCells(xlCellTypeLastCell).Row + 1, 1)
Rows(cc.Row).Copy blank_cell  
Next  
End With  
End Sub
 
Чёто перемудрил, так короче:  
 
Private Sub CommandButton1_Click()  
For Each cc In Selection.Cells  
Set blank_cell = Sheets(2).Cells(Sheets(2).[a1].SpecialCells(xlCellTypeLastCell).Row + 1, 1)
Rows(cc.Row).Copy blank_cell  
Next  
End Sub
 
Hugo, а чем Ваш вариант отличается от моего? всё по сути то же самое?  
если выделить диапазон А10:А15, то данный макрос прекрасно копирует строки с 10 по 15, но если выделить к примеру две ячейки А10 и А15, то он уже не скопирует 10 и 15 строки...  
собственно основная проблема в этом...
 
А Вы пробовали или Вам так кажется?
 
И в общем-то и Ваш код тоже прекрасно работает, но мой покороче и попонятней имхо.
 
Sub Снятие()  
 
всем спасибо...я остановился на таком варианте...  
 
Dim LastRow As Long  
 
For Each area In Selection.Areas  
For Each cell In area.Cells  
stroka = cell.Row  
LastRow = Sheets(2).Cells(Rows.Count, 3).End(xlUp).Row + 1  
ActiveSheet.Rows(stroka).Copy Destination:=Sheets(2).Cells(LastRow, 1)  
Next cell  
Next area  
 
End Sub
Страницы: 1
Читают тему
Наверх