Excel – 自定义按另一个工作表的列中的值进行sorting
我正在尝试根据多个条件对Sheet2
的数据集进行sorting,其中一个数据集应该基于Sheet1
列G中粘贴的值。所以,首先我想根据第三个数值的升序对数据进行sorting列,然后按我的自定义顺序。
我想在表2中对以下数据进行sorting:
首先基于Rank(1-n),然后根据用户指定的COL G Sheet 1中的自定义订单的types:
结果应该是:
由于col G中用户指定的值可能会更改(也可能是不同的顺序),因此我无法使用静态列表。 通过录制macros,我想出了下面的代码(使用静态列表):
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知道如何提取列中的所有值作为文本string基于Sheet 1 col G中的值的数据。
谢谢!
所以我的问题是如何使用循环或如果Excel知道如何提取列中的所有值作为文本string基于Sheet 1 col G中的值的数据。
例如在Sheet2
上转换一系列值:
以逗号分隔的string,您可以使用:
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
转换这个:
对此: