Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 用单一标准分离大型数据集_Excel_Vba - Fatal编程技术网

Excel 用单一标准分离大型数据集

Excel 用单一标准分离大型数据集,excel,vba,Excel,Vba,我的目标是编写一个宏,它将获取数据(这只是数据的一个示例),并根据班次编号(班次1、2、3)对每一行进行分组 基本上,该表将成为我们工厂记录数据的数据库,因此其行维度将是动态的 理想情况下,我能够为excel找到一种方法来识别3个不同的班次,选择它们各自的行,并用1行偏移量将它们分开,这样就可以方便地从那里操作数据 我最初的想法是导入所有数据,按每个条件过滤,然后在偏移量处复制和粘贴,但这不起作用 我在下面发布的代码只是为了测试filter方法是否有效。任何其他想法都将不胜感激 ''''''''

我的目标是编写一个宏,它将获取数据(这只是数据的一个示例),并根据班次编号(班次1、2、3)对每一行进行分组

基本上,该表将成为我们工厂记录数据的数据库,因此其行维度将是动态的

理想情况下,我能够为excel找到一种方法来识别3个不同的班次,选择它们各自的行,并用1行偏移量将它们分开,这样就可以方便地从那里操作数据

我最初的想法是导入所有数据,按每个条件过滤,然后在偏移量处复制和粘贴,但这不起作用

我在下面发布的代码只是为了测试filter方法是否有效。任何其他想法都将不胜感激

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
更新:这是我现在使用的确切代码。它可以很好地对所有数据进行排序,但不能分组

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包含所有三个单词
Shift1
Shift2
Shift3
。如果没有,则必须使用
如果aCell为Nothing
检查

逻辑

  • 对列进行排序
  • 查找第一次出现的
    Shift2
  • < LI>插入空白行
  • 查找第一次出现的
    Shift3
  • < LI>插入空白行 之前

    之后


    因此,如果您要手动执行此操作,您只需按班次排序,然后在每个不同的班次组之间留出一个空格?是的,您将按班次手动筛选,并将数据移动到每个组以一行分隔的位置。这正是我要做的,谢谢!然而,在修改名称以适应我的变量之后,我一直在运行
    .Rows(aCell.Row)行并出错“未设置对象变量或带块变量。你知道这到底意味着什么吗?是的见我的假设部分。如果缺少Shift2或Shift3,则必须使用
    如果aCell为Nothing
    检查更改
    .Rows(aCell.Row)。插入
    如果没有,则将aCell为Nothing.Rows(aCell.Row)。插入
    该代码对于排序数据非常有效!我很难让它插入一行到不同的组,但我会继续尝试。非常感谢。你能分享你在queston中使用的确切代码吗?