2014-10-31 5 views
1

Если у меня есть 30 строк, и я хочу скопировать 1-й, 2-й и 3-й, пропустите пять, затем скопируйте следующие три, а затем пропустите пять и скопируйте следующие три строки: Как я могу сделать это? До сих пор у меня только эта формулаКопирование каждого n-го ряда в excel

=OFFSET(Sheet1!$A$1,(ROW()-1)*5,0) 

, который получает только мне одно значение ячейки, но я хотел бы всю строку скопированной в другой лист.

Любая помощь будет замечательной! БЛАГОДАРЯ

+0

Ваш вопрос помечен [VBA] - как вы используете формулу? – pnuts

+1

Извините, я не уточнил, я готов использовать либо VBA, либо формулы. Я также использую excel 2003. Эта формула была помещена в лист 2 и тащилась вниз. Он собирал каждое пятое значение в нужном столбце. Однако я бы хотел, чтобы целые строки копировались. –

+0

Не подходит для всех требований, но вы можете подумать о добавлении столбца в Sheet1 с '= MOD (ROW() - 1,8)' скопировано вниз, фильтруя его для <3 и копируя то, что остается видимым. – pnuts

ответ

0
Here is a hint: 
Row Number Modulus 8 in (1,2,3) identifies the target Row Numbers. 


Enter in first column, first row and copy down for each column: 
=IF(AND(MOD(ROW(Sheet1!A1),8) > 0,MOD(ROW(Sheet1!A1),8) < 4),Sheet1!A1,"") 
+0

Благодарим вас за ответ. Мне все еще интересно, как скопировать 3 строки, пропустить следующее N-е число строк, скопировать 3 строки, пропустить следующий n-й номер и т. Д. –

+0

Он намекнул на модуль. Поместите «= MOD (ROW (A1), 8)» в ячейку A1 рабочего листа и перетащите вниз, посмотрите, что произойдет. –

0

Try,

=OFFSET(Sheet1!$A$1,(ROW(1:1)-1)+INT((ROW(1:1)-1)/3)*5,COLUMN(A:A)-1)

Наполните вправо и вниз по мере необходимости.

VBA Дополнение:

Sub copy_some() 
    Dim r As Long 
    With ActiveSheet.Cells(1, 1).CurrentRegion 
     For r = 1 To .Rows.Count Step 8 
      .Cells(r, 1).Resize(3, .Columns.Count).Copy _ 
       Destination:=Sheets("sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 
     Next r 
    End With 
End Sub 
-1

Это будет делать трюк. просто используйте ячейки (строки #, Col #) для ваших циклов.

Sub Copy3Skip5() 

Dim iRow As Integer 
Dim count As Integer 
Dim tRow As Integer 
Dim lastRow As Integer 
Dim source As String 
Dim target As String 

source = "Sheet1" 
target = "Sheet2" 
'Get the last row on your source sheet. 
lastRow = Sheets(source).Range("A65536").End(xlUp).Row 
'Set the Target Sheet first row 
tRow = 2 
'assuming your data starts on Row 2 after a header row. 
'Loop through the Source sheet 
For iRow = 2 To lastRow 
    count = 1 
    Do While count <= 3 
     'Cells(tRow, 1) translates to Range("A2") if tRow = 2 and "A3" if tRow = 3. and so on 
     Sheets(target).Cells(tRow, 1) = Sheets(source).Cells(iRow, 1) 
     tRow = tRow + 1 
     iRow = iRow + 1 
     count = count + 1 
    Loop 
'add 4 to the iRow, because we already added 1 at the end of the previous loop 
    iRow = iRow + 4 
Next iRow 

End Sub 

Sheet1 Result

Смежные вопросы