按单一标准分离大量数据

在这里输入图像说明

我的目标是编写一个macros来获取数据(这只是它的样本),并按照移位号(Shift 1,2,3)对每行进行分组。

基本上这张表将成为我们工厂logging的数据的一个数据库,所以它的行尺寸将是dynamic的。

理想情况下,我将能够find一种方法让excel识别3个不同的class次,select他们各自的行,并用1行的偏移量分开,从那里可以轻松地操作数据。

我最初的想法是导入所有的数据,按照每个标准过滤,然后复制并粘贴在一个偏移量,但是这是行不通的。

我在下面发布的代码只是一个testing,看看过滤方法是否可行。 任何其他的想法将不胜感激。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Columns("A:J").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$J$51").AutoFilter Field:=3, Criteria1:="Shift 1" Range("A8:J10").Copy Worksheets("Sorter").AutoFilterMode = False Range("A20").PasteSpecial (xlPasteAll) Application.CutCopyMode = False '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Columns("A:J").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$J$51").AutoFilter Field:=3, Criteria1:="Shift 2" Range("A8:J10").Copy Worksheets("Sorter").AutoFilterMode = False Range("A25").PasteSpecial (xlPasteAll) Application.CutCopyMode = False '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Columns("A:J").Select Selection.AutoFilter ActiveSheet.Range("$A$1:$J$51").AutoFilter Field:=3, Criteria1:="Shift 3" Range("A8:J10").Copy Worksheets("Sorter").AutoFilterMode = False Range("A30 ").PasteSpecial (xlPasteAll) Application.CutCopyMode = False End Sub 

更新:这是我正在使用的确切代码。 对所有的数据进行sorting,但是并没有分成不同的组。

 Sub test02() Dim ws As Worksheet Dim aCell As Range, bCell As Range ~~> Change this to the relevant sheet Set ws = ThisWorkbook.Sheets("Tracker") With ws .Columns("A:J").Sort Key1:=.Range("C1"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _` `DataOption1:=xlSortNormal Set aCell = .Columns(3).Find(What:="Shift2") If Not aCell Is Nothing Then .Rows(aCell.Row).Insert Set aCell = .Columns(3).Find(What:="Shift3") If Not aCell Is Nothing Then .Rows(aCell.Row).Insert End With End Sub 

这是你正在尝试?

 Sub Sample() Dim ws As Worksheet Dim aCell As Range, bCell As Range '~~> Change this to the relevant sheet Set ws = ThisWorkbook.Sheets("Sheet1") With ws .Columns("A:J").Sort Key1:=.Range("C1"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal Set aCell = .Columns(3).Find(What:="Shift2") .Rows(aCell.Row).Insert Set aCell = .Columns(3).Find(What:="Shift3") .Rows(aCell.Row).Insert End With End Sub 

我的假设

列3有三个字Shift1Shift2Shift2 。 如果没有,那么你将不得不使用If aCell is Nothing检查。

逻辑

  1. 对列进行sorting
  2. find第一个出现的Shift2
  3. 插入空行
  4. findShift3的第一个出现
  5. 插入空行

之前

在这里输入图像描述

在这里输入图像描述