Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops 按列值分组行_Loops_Excel_Grouping_Vba - Fatal编程技术网

Loops 按列值分组行

Loops 按列值分组行,loops,excel,grouping,vba,Loops,Excel,Grouping,Vba,在宏中,我想对第四列中具有相同值的行进行分组。该列中的值是有限的(因此我可以为每个可能的值编写代码),但假设值是无限的会更强大 我的第一个想法是创建一个循环,选择具有给定值的行,然后使用“Selection.Group”。我将“循环直到”列1“IsEmpty” 不太清楚如何实现这一点。下面是我得到的,这给了我一个错误消息;对象“工作表”的方法“范围”失败 这只是“排序”部分的一个录制宏,表声明为DIM: Dim MySheet As Worksheet: Set MySheet = Sheets

在宏中,我想对第四列中具有相同值的行进行分组。该列中的值是有限的(因此我可以为每个可能的值编写代码),但假设值是无限的会更强大

我的第一个想法是创建一个循环,选择具有给定值的行,然后使用“Selection.Group”。我将“循环直到”列1“IsEmpty”

不太清楚如何实现这一点。下面是我得到的,这给了我一个错误消息;对象“工作表”的方法“范围”失败


这只是“排序”部分的一个录制宏,表声明为DIM:

Dim MySheet As Worksheet: Set MySheet = Sheets("Sheet1")
MySheet.Sort.SortFields.Clear
MySheet.Sort.SortFields.Add _
    Key:=Range("A1"), _
    SortOn:=xlSortOnValues, _
    Order:=xlDescending, _
    DataOption:=xlSortNormal
With MySheet.Sort
    .SetRange Range("A1:A10")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub
现在,关于对单元格进行分组。您可以根据每个“组”的值在其上声明范围,如在命名范围中
(Ctrl+F3)

i=1到MySheet.Rows.Count的

Range\u Start=“A”&i'存储范围的开头
如果范围(“A”&i)范围(“A”&i-1),则
Range\u End=“A”&i'存储范围的开头
MyRange=MySheet.Range(范围\开始和:“&范围\结束)
ActiveWorkbook.Names.Add名称:=“范围”&ActiveWorkbook.Names.Count+1,引用:=MyRange
接下来我
尽管如此,我认为存储范围_Start可能需要一些微调


无论如何。最好的方法是使用
记录
功能。然后,通过声明变量
DIM
(s)来调整代码,并且只有在编写循环之后。根据您的问题,我不清楚分组的含义以及您需要分组的目的。干杯!

为什么不试试您想做的事情,告诉我们它是否有效,或者您是否有关于如何改进该方法的问题。如果您先发布自己的代码,您可能会得到更好的建议d然后寻求帮助。要将它们组合在一起,必须首先对它们进行排序。如果选择几行并使用简单的命令“Selection.group”运行宏“你会明白我的意思的。一旦行成为组,只需单击lhs即可轻松隐藏和取消隐藏它们。这项任务的棘手部分是定义要分组的范围,我正在使用“if”语句和循环中的偏移选择来完成这项工作,但我还没有完全理解,但我会在完成时发布我的代码。
Dim MySheet As Worksheet: Set MySheet = Sheets("Sheet1")
MySheet.Sort.SortFields.Clear
MySheet.Sort.SortFields.Add _
    Key:=Range("A1"), _
    SortOn:=xlSortOnValues, _
    Order:=xlDescending, _
    DataOption:=xlSortNormal
With MySheet.Sort
    .SetRange Range("A1:A10")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub
For i = 1 To MySheet.Rows.Count
    Range_Start = "A" & i 'Store the begining of the range
    If Range("A" & i) <> Range("A" & i - 1) Then
    Range_End = "A" & i 'Store the begining of the range
    MyRange = MySheet.Range(Range_Start & ":" & Range_End)
    ActiveWorkbook.Names.Add Name:="range" & ActiveWorkbook.Names.Count + 1, RefersTo:=MyRange
Next i