Страницы: 1
RSS
Выделение диапазона от текущей выделенной ячейки до определенного столбца
 
Добрый день. Возник следующий вопрос.    
Имеем таблицу на листе 1 вложенного файла.  
Хотим получить из неё таблицу вида, представленного на листе 2.  
Раньше для этого я использовала следующий кусок макроса:  
Range("E1:Z1").Select  
Range(Selection, Selection.End(xlDown)).Cut  
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 3).Select      
ActiveSheet.Paste  
 
 
Dim w2 As Integer  
For w2 = 1 To 10  
Range("E1").Select  
ActiveCell.End(xlDown).Select  
ActiveCell.Offset(0, 0).Select  
Range(Selection, Selection.End(xlToRight)).Select  
Range(Selection, Selection.End(xlDown)).Select  
Selection.Cut  
Range("C1").Select  
ActiveCell.End(xlDown).Offset(1, 0).Select  
ActiveSheet.Paste  
Next w2  
 
Но он работает корректно, когда заполнены все ячейки диапазона Е1:Z10 имеют заполненные ячейки.    
Как доработать строку    
Range(Selection, Selection.End(xlToRight)).Select  
так, чтобы выделялся диапазон определенного размера, например, из 20 столбцов.  
Заранее спасибо.
 
> Как доработать строку  
Range(Selection, Selection.End(xlToRight)).Select  
так, чтобы выделялся диапазон определенного размера, например, из 20 столбцов.  
 
Вам нужно 22 столлбца выделить (для первого прохода), поэтому  
 
Range(Selection, Selection.Offset(0, 21)).Select
 
{quote}{login=The_Prist}{date=11.08.2010 10:41}{thema=}{post}Здравствуйте.  
Range(Selection, Cells(Selection.Row,20)).Select  
 
Хотя зачем Вам Select? Может попытаемся от него избавиться? Выделение сильно тормозит работу макроса.{/post}{/quote}  
Я бы с удовольствием, но на оптимизацию данного куска знаний не хватает(((((
 
Попробуйте такой код. Чтобы увидеть, как он работает, раскомментируйте две строки в цикле и пройдите программу по шагам (F8). Увидите, что и куда будет переноситься.  
 
Sub bb()  
Dim i As Long, iRows As Long  
iRows = Range("C1").End(xlDown).Row 'число строк в куске  
'i - номер куска. Первый кусок уже на месте.  
'Столбец куска i*2+1  
 
i = 2  
Do While Cells(1, i * 2 + 1) <> Empty  
'    Range(Cells(1, i * 2 + 1), Cells(iRows, i * 2 + 2)).Select  
'    Cells(iRows * (i - 1) + 1, 3).Select  
   Range(Cells(1, i * 2 + 1), Cells(iRows, i * 2 + 2)).Cut Cells(iRows * (i - 1) + 1, 3)  
   i = i + 1  
Loop  
End Sub  
 
ЗЫ 39339
 
{quote}{login=Казанский}{date=11.08.2010 11:11}{thema=}{post}Попробуйте такой код. Чтобы увидеть, как он работает, раскомментируйте две строки в цикле и пройдите программу по шагам (F8). Увидите, что и куда будет переноситься.  
 
Sub bb()  
Dim i As Long, iRows As Long  
iRows = Range("C1").End(xlDown).Row 'число строк в куске  
'i - номер куска. Первый кусок уже на месте.  
'Столбец куска i*2+1  
 
i = 2  
Do While Cells(1, i * 2 + 1) <> Empty  
'    Range(Cells(1, i * 2 + 1), Cells(iRows, i * 2 + 2)).Select  
'    Cells(iRows * (i - 1) + 1, 3).Select  
   Range(Cells(1, i * 2 + 1), Cells(iRows, i * 2 + 2)).Cut Cells(iRows * (i - 1) + 1, 3)  
   i = i + 1  
Loop  
End Sub  
 
ЗЫ 39339{/post}{/quote}  
Спасибо! Отлично работает))) сижу, разбираю, что всё это значит по отдельности, но принцип понятен. Спасибо!
Страницы: 1
Читают тему
Наверх