Vba 基于列中的条件创建多个范围

Vba 基于列中的条件创建多个范围,vba,excel,excel-2010,Vba,Excel,Excel 2010,我是VBA新手,我尝试根据列中的条件创建多个范围或数组,然后将它们放在单独的工作表中。问题是该代码必须适用于多个不同的数据集。所以一个数据sat看起来像 ,但数据点要多得多(每个数据集大约10000个) 所以我要做的是,为state列中的每组1创建一个范围/数组,然后在新工作表中移动相应的时间和数据。因此,对于我的示例,将有3个新工作表,第一个新工作表包含范围(“A2:B5”),第二个工作表包含范围(“A10:B12”)。对于每个数据集,“状态”列都会发生变化,新工作表的数量也会发生变化 我浏览

我是VBA新手,我尝试根据列中的条件创建多个范围或数组,然后将它们放在单独的工作表中。问题是该代码必须适用于多个不同的数据集。所以一个数据sat看起来像 ,但数据点要多得多(每个数据集大约10000个)

所以我要做的是,为state列中的每组1创建一个范围/数组,然后在新工作表中移动相应的时间和数据。因此,对于我的示例,将有3个新工作表,第一个新工作表包含范围(“A2:B5”),第二个工作表包含范围(“A10:B12”)。对于每个数据集,“状态”列都会发生变化,新工作表的数量也会发生变化

我浏览过这个网站,发现最接近我需要的是,但它有很多范围。老实说,我不知道如何完成我所需要的。我一直在尝试在if-then循环中创建一个while循环,在for-each循环中创建一个while循环,但无法使其工作

任何帮助都将不胜感激!我已经撞了好几个小时了。

这应该能帮到你:

Option Explicit

Sub main()
    Dim area As Range

    With Sheets("myDataSheet") '<--| reference your sheet (change "myDataSheet") to your actual sheet name
        With .Range("C1", .Cells(.Rows.Count, "A").End(xlUp)) '<--| reference its columns A:C range form row 1 down to last column A not empty row
            .AutoFilter Field:=3, Criteria1:="1" '<--| filter referenced range on its 3rd column (i.e. "State") with 1
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header
                For Each area In .Resize(.Rows.Count - 1, 2).Offset(1).SpecialCells(xlCellTypeVisible).Areas '<--| loop through filtered range (skipping header) 'Areas'
                    area.Copy Sheets.Add(Sheets(Sheets.Count)).Range("A1") '<--| copy current 'Area' into new sheet
                Next area
            End If
        End With
        .AutoFilterMode = False
    End With
End Sub
选项显式
副标题()
模糊区域作为范围
对于工作表(“myDataSheet”)”这将帮助您:

Option Explicit

Sub main()
    Dim area As Range

    With Sheets("myDataSheet") '<--| reference your sheet (change "myDataSheet") to your actual sheet name
        With .Range("C1", .Cells(.Rows.Count, "A").End(xlUp)) '<--| reference its columns A:C range form row 1 down to last column A not empty row
            .AutoFilter Field:=3, Criteria1:="1" '<--| filter referenced range on its 3rd column (i.e. "State") with 1
            If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header
                For Each area In .Resize(.Rows.Count - 1, 2).Offset(1).SpecialCells(xlCellTypeVisible).Areas '<--| loop through filtered range (skipping header) 'Areas'
                    area.Copy Sheets.Add(Sheets(Sheets.Count)).Range("A1") '<--| copy current 'Area' into new sheet
                Next area
            End If
        End With
        .AutoFilterMode = False
    End With
End Sub
选项显式
副标题()
模糊区域作为范围

对于工作表(“myDataSheet”)“你是否只查看状态
1
,而忽略所有其他状态?是的,只有2个状态,我只需要移动状态1?你为什么不给我们一些代码?你是否只查看状态
1
,而忽略所有其他状态?是的,只有2个状态,我只需要状态1被移动你为什么不给我们一些代码?谢谢!新床单制作完成,范围正确。我剩下的最后一个问题是,复制的区域只包括第一列,但我需要将其中包含数据和时间的两列都移到上面。请参阅编辑的代码。如果它解决了您的问题,请将答案标记为已接受。非常感谢。太神了没想到回复这么快!谢谢谢谢新床单制作完成,范围正确。我剩下的最后一个问题是,复制的区域只包括第一列,但我需要将其中包含数据和时间的两列都移到上面。请参阅编辑的代码。如果它解决了您的问题,请将答案标记为已接受。非常感谢。太神了没想到回复这么快!谢谢