2015-07-30 4 views
0

я подготовил Data лист, содержащий мою первичную базу данныхExcel 2010 Справочная таблица данных с одного листа на другой

A   B   C 
1 ID   Col2  Col3 
2 800   90  120 
3 799   50  110 
4 798   80  785 
5 797   60  642 
6 796   60  212 
7 795   26  163 
8 794   66  171 
9 793   36  673 
10 792   16  223 
11 791   31  133 
12 790   83  253 
13 789   33  256 
14 788   31  623 

теперь я хочу, чтобы создать больше 3 листа с именем TakeAll, TakeEvery2nd, TakeEvery4th

Я я пытаюсь сделать:

Take All - возьмет все данные от Data лист и будет d жаемый как оригинал:

A   B   C 
1 ID   Col2  Col3 
2 800   90  120 
3 799   50  110 
4 798   80  785 
5 797   60  642 
6 796   60  212 
7 795   26  163 
8 794   66  171 
9 793   36  673 
10 792   16  223 
11 791   31  133 
12 790   83  253 
13 789   33  256 
14 788   31  623 

Take Every 2nd - будет принимать каждый второй ряд, значение будет принимать по 1 Id, который 800 и будет чем пропустить каждый 2-й (покажут идентификаторы 800, 798, 796, 794, 792, 790)
и будет выглядеть следующим образом:

A   B   C 
1 ID   Col2  Col3 
2 800   90  120 
4 798   80  785 
6 796   60  212 
8 794   66  171 
10 792   16  223 
12 790   83  253 
14 788   31  623 

Take Every 4th - будет взять первую строку и будет принимать каждый 4-ый смысл:

A   B   C 
1 ID   Col2  Col3 
2 800   90  120 
6 796   60  212 
10 792   16  223 
14 788   31  623 

Примечание:

`Data` will be modified and also new rows are planned to be added 

Я имею трудности, чтобы понять, как подойти к этому

+0

Сколько строк? Фильтр со вспомогательным столбцом с использованием функции [MOD] (https://support.office.com/en-US/article/MOD-function-0CAF2C6C-891D-4A0B-B618-3B0D60296809) будет быстрее для многих строк. – Jeeped

ответ

0

Как уже упоминалось в моем комментарии, используя MOD function в колонке «хелпера» секвенировать шатается кажется хороший выбор ,

Sub break_many() 
    Dim rw As Long, v As Long, vMODs As Variant, vWSs As Variant 

    vMODs = Array(1, 2, 4) 
    vWSs = Array("TakeAll", "TakeEvery2nd", "TakeEvery4th") 

    With Sheets("Sheet4") '<-set this worksheet reference! 
     If .AutoFilterMode Then .AutoFilterMode = False 
     For v = LBound(vMODs) To UBound(vMODs) 
      With .Cells(1, 1).CurrentRegion 
       With .Offset(1, .Columns.Count).Resize(.Rows.Count - 1, 1) 
        .Formula = "=MOD(ROW(1:1)-1, " & vMODs(v) & ")" 
       End With 
      End With 
      With .Cells(1, 1).CurrentRegion 
       .AutoFilter field:=.Columns.Count, Criteria1:=0 
       With .Resize(.Rows.Count, .Columns.Count - 1) 
        .Copy Destination:=Sheets(vWSs(v)).Cells(1, 1) 
       End With 
       .AutoFilter field:=.Columns.Count 
       With .Offset(1, .Columns.Count - 1).Resize(.Rows.Count - 1, 1) 
        .Clear 
       End With 
      End With 
     Next v 
     If .AutoFilterMode Then .AutoFilterMode = False 
    End With 
End Sub 

Это зависит от трех целевых рабочих листов, уже существующих и не очищает цель до вставки данных.