Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2016, 11:17   #1
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию Скопировать диапазон с листа на лист

Как без использования цикла скопировать с лист1 ячейки ("A2:B30,E2:F30") на лист2, только те в которых нет пустых в Е столбце?
Вложения
Тип файла: xlsx Книга5.xlsx (10.6 Кб, 19 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 27.07.2016 в 11:20. Причина: хотел изменить название, нету возможности
Aleksandr H. вне форума Ответить с цитированием
Старый 27.07.2016, 11:46   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно так:
Код:
Intersect([A:B,E:F], [E2:E30].SpecialCells(2).EntireRow).Copy Sheets(2).[A1]
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 27.07.2016 в 11:55.
SAS888 вне форума Ответить с цитированием
Старый 27.07.2016, 11:47   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub CopyNoBlankE()
  With Worksheets(2)
    Worksheets(1).Columns(5).SpecialCells(xlCellTypeConstants).EntireRow.Copy .Cells(1)
    .Range("C:D").Delete ' or .Clearcontents
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.07.2016, 11:57   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

IgorGO, еще 1-ую строку удалить...
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 27.07.2016, 11:59   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Сережа, а она не пустая в колонке Е))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.07.2016, 12:01   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Странно... Я вижу заголовок "Field6".
Автор вопроса просил копировать со 2-ой строки, не зависимо от того, есть или нет какое-либо значение в "E1".
Я это понял буквально.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 27.07.2016, 12:04   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

хотя, согласен, с А2:... т.е. строку нужно-таки удалять)

но Саше нужно только направление. он в состоянии бархатным напильником тщательно обработать код до нужного ему состояния
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 27.07.2016, 12:55   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

SAS888,IgorGO спасибо за подсказки.

У меня при слове "Пересечение" первым всплыл в мозгу Union , а не Intersect, вот и ваял
Код:
Set cellResult = Union(Range("A2:B" & iLastRowSource), Range("E2:F" & iLastRowSource))
cellResult.Copy
и не мог придумать куда условие на пустые вставлять. При .pasteSpecial SkipBlanks ведь пропустит полностью пустые строки.

Буду использовать на выбор
Код:
Sub CopyNoBlankE()
  Dim r As Long
  ' == v2
  r = Sheets(2).Cells(Sheets(2).Rows.Count, "A").End(xlUp).Row + 1
  Intersect([A2:B5000,E2:F5000], [E2:E5000].SpecialCells(2).EntireRow).Copy _
            Sheets(2).Cells(r, 1)
  
  ' == v2
  With Worksheets(2)
    r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    Worksheets(1).Range("E2:E5000").SpecialCells(xlCellTypeConstants).EntireRow.Copy .Cells(r, 1)
    .Range("C" & r & ":D5000").Delete Shift:=xlToLeft
  End With
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
...вставить диапазон из другого листа... maxvip Microsoft Office Excel 8 22.08.2017 16:56
Как скопировать лист? gizy@ Microsoft Office Excel 11 13.01.2012 15:33
Скопировать каждую строчку из выделенного диапазон Matras Microsoft Office Excel 7 06.10.2011 11:36
...как скопировать лист?... maxvip Microsoft Office Excel 6 23.01.2010 16:03
Как скопировать диапазон несколько раз? Алексей11111 Microsoft Office Excel 9 19.11.2009 10:13