Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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,我正在寻找一个宏来对同一张表中的多个动态范围进行排序。每个范围由B列中的一个空单元格分隔。理想情况下,我希望代码遍历B列,找到第一个动态范围,选择/激活该范围内的所有行(.EntireRow),根据C列升序排序,然后转到下一个动态范围,依此类推。这是可能的吗?如果可以假设B列中的空白单元格表示要排序的新节,并且总是至少有一行数据要排序,那么以下内容应该可以实现您的目标 Sub sort_sections() Dim fr As Long, rws As Long, lc As Long

我正在寻找一个宏来对同一张表中的多个动态范围进行排序。每个范围由B列中的一个空单元格分隔。理想情况下,我希望代码遍历B列,找到第一个动态范围,选择/激活该范围内的所有行(.EntireRow),根据C列升序排序,然后转到下一个动态范围,依此类推。这是可能的吗?

如果可以假设B列中的空白单元格表示要排序的新节,并且总是至少有一行数据要排序,那么以下内容应该可以实现您的目标

Sub sort_sections()
    Dim fr As Long, rws As Long, lc As Long

    With ActiveSheet
        lc = .Cells(1, Columns.Count).End(xlToLeft).Column
        For fr = 1 To .Cells(Rows.Count, 3).End(xlUp).Row
            If IsEmpty(.Cells(fr, 2)) Then
                rws = .Evaluate("SMALL(INDEX(ROW(B:B)+SIGN(LEN(B:B))*1E+99, , )" & _
                                  ", COUNTBLANK(B$1:B" & fr & ")+1)-1") - (fr - 1)
                With .Cells(fr, 1).Resize(rws, lc)
                    Debug.Print .Address(0, 0)  'output the section address to the Immediate window
                    .Cells.Sort Key1:=.Columns(3), Order1:=xlAscending, _
                        Orientation:=xlTopToBottom, Header:=xlYes
                End With
            End If
        Next fr
    End With

End Sub
这将扭转这一局面:

。。。在这方面,


有许多方法可以通过查找B列中的下一个空白单元格来收集截面范围。由于没有提供样本数据,我选择了一种相当复杂的方法,该方法应考虑数据的变化,但计算量很大。四百节需要几分钟。

是的。但是每个区域都应该有一个标题,否则第一个单元格在排序过程中不会移动。感谢@L42的回复,很高兴知道这是可能的。每个范围都有一个标题在C列(紧邻空白B单元格),但是每个标头都是特定于该范围的,所以有400个+标题。有什么想法吗?你的意思是你有400多个标题和400多个范围要排序?在排序前几个块的同时记录一个宏,然后尝试编辑结果代码。如果您遇到问题,请发回(带代码),并准确描述问题所在。非常感谢@Jeeped,您的代码正是我想做的。顺便说一句,这段代码在大约15-20秒内完成了大约950行,这对我来说是非常棒的。我有一个问题,你能简要解释一下你的代码的这一部分吗?