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