【发布时间】:2021-12-22 23:24:05
【问题描述】:
我在工作表中有一个范围,如下所示,我想对另一个工作表范围列 Status 中的 Beta 列进行自定义排序:
+---------+----------+-----+
| Alpha | Beta | Gama|
+---------+----------+-----+
| PROJ 1 | COMPLETE | 245 |
+---------+----------+-----+
| PROJ 2 | PENDING | 344 |
+---------+----------+-----+
| PROJ 3 | COMPLETE | 122 |
+---------+----------+-----+
| PROJ 4 | COMPLETE | 111 |
+---------+----------+-----+
| PROJ 5 | PENDING | 101 |
+---------+----------+-----+
| PROJ 6 | PENDING | 222 |
+---------+----------+-----+
| PROJ 7 | PROGRESS | 343 |
+---------+----------+-----+
| PROJ 8 | PROGRESS | 256 |
+---------+----------+-----+
| PROJ 9 | PROGRESS | 606 |
+---------+----------+-----+
| PROJ 10 | COMPLETE | 234 |
+---------+----------+-----+
像这样:
+---------+----------+---------+
| Alpha | Beta | Gama |
+---------+----------+---------+
| PROJ 7 | PROGRESS | 343 |
+---------+----------+---------+
| PROJ 8 | PROGRESS | 256 |
+---------+----------+---------+
| PROJ 9 | PROGRESS | 606 |
+---------+----------+---------+
| PROJ 2 | PENDING | 344 |
+---------+----------+---------+
| PROJ 5 | PENDING | 101 |
+---------+----------+---------+
| PROJ 6 | PENDING | 222 |
+---------+----------+---------+
| PROJ 1 | COMPLETE | 245 |
+---------+----------+---------+
| PROJ 3 | COMPLETE | 122 |
+---------+----------+---------+
| PROJ 4 | COMPLETE | 111 |
+---------+----------+---------+
| PROJ 10 | COMPLETE | 234 |
+---------+----------+---------+
基于另一个 Range 列的唯一值:
+----------+
| STATUS |
+----------+
| PROGRESS |
+----------+
| PENDING |
+----------+
| COMPLETE |
+----------+
这是否可以在 VBA 中使用自定义排序功能?例如类似下面的东西(不工作):
Sub SortTable()
Dim rng1 As Range, rng2 As Range
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")
With ws1
Set rng1 = .Range(.Cells(1, 1), .Cells(11, 3))
End With
With ws2
Set rng2 = .Range(.Cells(1, 1), .Cells(4, 3))
End With
With rng1.Sort
.SortFields.Add Key:=rng2.ListColumns("Status").Range, Order:=xlAscending
.Header = xlYes
.Apply
End With
End Sub
【问题讨论】:
-
“来自另一个 Range 列的唯一值”是什么意思?是否在您向我们展示的范围内,或者有很多出现并且代码应该提取唯一的?那么,
rng2是否会成为您代码中的排序标准范围? -
Rng2是一个唯一值范围列表,在Rng1的Beta列中具有匹配值。使用该顺序(序列),Rng1列 (Beta) 需要进行排序。 -
在PROJ 3和PROJ 10中,优先级是PROJ 10。这是一个字符,所以10比3快。需要改变数据的格式。比较 3 和 10,10 更快。比较03和10,03是最快的排名。
-
对不起,我不明白。这个想法只是按照
Rng2中给出的顺序对Beta列值进行排序。 -
如果Alpha字段是3,10是一个数字,优先级是3 快,但是后面有一个数字和字母混在一起,所以你得把它看成一个字母作为一个整体。在这种情况下,按排序顺序将 3 放在 10 之后。这意味着您必须将数字格式更改为 03,10,或者如果单位较大,则更改为 003, 010 以确保正确对齐。