按单一标准分离大量数据

时间:2017-06-02 17:03:50

标签: excel excel-vba vba

enter image description here

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

本质上,此工作表将成为我们工厂中记录的数据的数据库,因此其行尺寸将是动态的。

理想情况下,我可以找到一种方法让excel识别3种不同的移位,选择它们各自的行并用1行偏移将它们分开,从而可以很容易地从那里操作数据。

我最初的想法是导入所有数据,按照每个条件对其进行过滤,然后复制并粘贴一个偏移量,但这不起作用。

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

With objSheet.Cells(1,1).Font 
 .Bold = True 
 .Italic = True 
End With

更新:这是我现在使用的确切代码。它可以很好地对所有数据进行排序,但不会分成组。

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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

1 个答案:

答案 0 :(得分:1)

这是你在尝试的吗?

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

我的假设

Col 3有三个单词Shift1Shift2Shift3。如果没有,那么您将不得不使用If aCell is Nothing检查。

<强>逻辑

  1. 对列进行排序
  2. 查找Shift2
  3. 的第一个匹配项
  4. 插入空白行
  5. 查找Shift3
  6. 的第一个匹配项
  7. 插入空白行
  8. <强>之前

    enter image description here

    <强>后

    enter image description here