Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Vba 如何基于一列对多个命名范围进行排序?_Vba_Excel - Fatal编程技术网

Vba 如何基于一列对多个命名范围进行排序?

Vba 如何基于一列对多个命名范围进行排序?,vba,excel,Vba,Excel,我需要在一张excel表格中对多个已命名区域进行排序,该表格已由Data1、Data2、 在每个命名区域中,都有一个用于排序的单元格。我的问题是希望命名区域中的所有数据都相应地移动到已排序的单元格中 根据图片,如果列A已排序,则右侧的数据也会向上移动 假设要排序的是多行中的重复字符串,例如a列,第24-50行都包含“file1”,则可以使用以下代码选择指定列中包含该字符串的所有行。从那里你可以应用你的分类 Private Sub Test1() Dim c As Range

我需要在一张excel表格中对多个已命名区域进行排序,该表格已由Data1、Data2、

在每个命名区域中,都有一个用于排序的单元格。我的问题是希望命名区域中的所有数据都相应地移动到已排序的单元格中

根据图片,如果列A已排序,则右侧的数据也会向上移动


假设要排序的是多行中的重复字符串,例如a列,第24-50行都包含“file1”,则可以使用以下代码选择指定列中包含该字符串的所有行。从那里你可以应用你的分类

Private Sub Test1() Dim c As Range Dim d As Range Dim Fitem As String Dim FEndRange As Long Dim FStartRange As Long 'Search for the name of the header you want to base your range off of... With Worksheets("Sheet1").Range("A1").EntireRow Set c = .Find("HEADER", LookIn:=xlValues) End With With Worksheets("Sheet1").Range(c.Address).EntireColumn Set d = .Find("file1", LookIn:=xlValues) Set c = Worksheets("Sheet1").Cells(d.Row, c.Column) Fitem = c.Value End With If (c.EntireColumn.Find(what:=Fitem, lookat:=xlWhole, After:=Cells(2, c.Column)).Row) 0 Then FStartRange = c.EntireColumn.Find(what:=Fitem, After:=Cells(1, c.Column)).Row FEndRange = c.EntireColumn.Find(what:=Fitem, After:=Cells(1, c.Column), searchdirection:=xlPrevious).Row Worksheets("Sheet1").Cells(FStartRange, d.Column).Activate Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(FStartRange, d.Column), Worksheets("Sheet1").Cells(FEndRange, d.Column)).EntireRow.Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=c, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers With ActiveWorkbook.Worksheets("Sheet1").Sort 'place your sort criteria here End With End If End Sub
根据图片和评论中的新信息,下面的代码将帮助您找到需要的位置


    Option Explicit
    Private Sub Test()

    Dim x As Long
    Dim y As Long
    Dim s As Long
    Dim t As Long
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastrow As Long

    lastrow = ActiveWorkbook.Worksheets("Sheet1").Cells(ActiveWorkbook.Worksheets("Sheet1").Rows.Count, "E").End(xlUp).Row
    Set ws = Worksheets("Sheet1")

    ws.Activate
    y = WorksheetFunction.CountIf(Range("A:A"), "Data*")
    s = 1

    For x = 1 To y
    s = ws.Range("A:A").Find(what:="Data*", after:=Range("A" & s)).Row

    If x = y Then
    t = lastrow + 2
    Else
    t = ws.Range("A:A").Find(what:="Data*", after:=Range("A" & s)).Row
    End If

    ws.Range(ws.Cells(s, 5), ws.Cells(t - 2, 17)).Select

'Add sort criteria here

    Next x

    End Sub

我使用的字母是任意的,可以更改为任何形式。

我尝试了这一个,但这一个用于对每个名称范围中的数据进行排序
Sub-sortingdata()Dim nRange作为ActiveWorkbook中每个nRange的名称。名称如果UCase(nRange.name)类似(“TEST*”),则为range(nRange.name)。排序键1:=range(nRange.name).Cells(2,3),Order1:=xlAscending,Header:=xlYes End如果下一个nRange End Sub
你也可以编辑你的问题,在那里添加代码。你为什么要这样做呢???也许答案是“再次思考,避免那些命名范围的事情”可能是你添加了一些“before”和“after”的例子场景因为用户将插入一组与上面的图像相同的数据@Pierre我想对命名区域进行排序。我们可以将数据锁定到我想排序的单元格中,以便它一起移动吗?请参考上面的图像,我只是附加了这一点。考虑到您的数据,使用偏移量可能会更容易。我将首先定位Data1和Data1的行值DATA2,然后通过DATA2(DATA1-DATA2)- 2来设置DATA2的行范围,以解释空白空间。对于DATA2,使用查找最后一行或参考或如果有DATA3、DATA4等,则生成循环函数来计算“数据[N]”的每个迭代。。然后还可以将列偏移4。这样,排序将参照Data1和Data2标签。