我正在尝试根据多个条件对Sheet2
中的数据进行排序,其中一个标准应基于Sheet1
列G中粘贴的值。首先,我想对数据进行排序基于第三列中值的升序,然后是我的自定义顺序。
我想在表2中对以下数据进行排序:
首先根据Rank(1-n),然后根据用户指定的col G Sheet 1中的自定义顺序输入Type:
结果应该是:
由于col G中的用户指定值可能会更改(也可能是不同的顺序),因此我无法使用静态列表。通过记录宏,我提出了以下代码(使用静态列表):
Columns("A:C").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("C2:C9999") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B9999") _
, SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="Type1,Type2,Type3" _
, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C9999")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
所以我的问题是如何使用循环或者Excel知道如何将列中的所有值作为文本字符串提取,根据Sheet1 col G中的值对数据进行排序。
谢谢!
答案 0 :(得分:1)
所以我的问题是如何使用循环或者Excel知道如何将列中的所有值作为文本字符串提取,根据Sheet1 col G中的值对数据进行排序。
转换一系列值,例如在Sheet2
:
以逗号分隔的字符串,您可以使用:
Join(WorksheetFunction.Transpose(ThisWorkbook.Worksheets("Sheet2").Range("A2:A4")), ",")
将返回:
Type1,Type2,Type3
因此,您的代码可能是:
Option Explicit
Sub Test()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim rngToSort As Range, rngOrderType As Range
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")
Set rngToSort = ws1.Range("A1:C5")
Set rngOrderType = ws2.Range("A2:A4")
With ws1.Sort.SortFields
.Clear
.Add Key:=rngToSort.Columns(3), _
SortOn:=xlSortOnValues, _
Order:=xlAscending
.Add Key:=rngOrderType.Columns(2), _
SortOn:=xlSortOnValues, _
CustomOrder:=Join(WorksheetFunction.Transpose(rngOrderType), ",")
End With
With ws1.Sort
.SetRange rngToSort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End Sub
将从Sheet1
转换为此内容:
对此: