Excel 用单一标准分离大型数据集
我的目标是编写一个宏,它将获取数据(这只是数据的一个示例),并根据班次编号(班次1、2、3)对每一行进行分组 基本上,该表将成为我们工厂记录数据的数据库,因此其行维度将是动态的 理想情况下,我能够为excel找到一种方法来识别3个不同的班次,选择它们各自的行,并用1行偏移量将它们分开,这样就可以方便地从那里操作数据 我最初的想法是导入所有数据,按每个条件过滤,然后在偏移量处复制和粘贴,但这不起作用 我在下面发布的代码只是为了测试filter方法是否有效。任何其他想法都将不胜感激Excel 用单一标准分离大型数据集,excel,vba,Excel,Vba,我的目标是编写一个宏,它将获取数据(这只是数据的一个示例),并根据班次编号(班次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
Shift3
因此,如果您要手动执行此操作,您只需按班次排序,然后在每个不同的班次组之间留出一个空格?是的,您将按班次手动筛选,并将数据移动到每个组以一行分隔的位置。这正是我要做的,谢谢!然而,在修改名称以适应我的变量之后,我一直在运行
.Rows(aCell.Row)行并出错“未设置对象变量或带块变量。你知道这到底意味着什么吗?是的见我的假设部分。如果缺少Shift2或Shift3,则必须使用如果aCell为Nothing
检查更改.Rows(aCell.Row)。插入到如果没有,则将aCell为Nothing.Rows(aCell.Row)。插入该代码对于排序数据非常有效!我很难让它插入一行到不同的组,但我会继续尝试。非常感谢。你能分享你在queston中使用的确切代码吗?