2

假设我在 Excel 工作表中有一个按字母顺序排列的学生姓名和(数字)成绩列表。在单独的工作表中,我想查看按降序排列的成绩。就这样。

需要明确的是:我确实知道如何对一系列单元格进行适当的排序。但是,如果我创建对另一个范围的引用范围并手动对其进行排序,则会调整引用并且我仍在查看未排序的列。链接到另一个工作表中的列是一件小事,但尽管 Excel 具有“数组函数”的概念,但它似乎没有将一系列单元格映射到其排序版本(或任何类型的非交互式排序)的函数, 真的)。

我的直接目标是制作一个数字按降序排列的条形图,所以如果有办法从未排序的范围生成这样的图表,我也想听听。但我可以想到几个用例,其中同一单元格范围的多个订单会很有用:

  1. 我需要一列,其中包含每个数字和下一个较大数字之间的差异(对数字进行排序时很容易),但我的主工作表按名称字母顺序排序。

  2. 我在一个工作表上有按客户名称字母顺序排列的数据,并且想要另一张具有(某些)相同数据的工作表,这些数据按城市或日期排序。除非我想要完全相同的布局,否则不能以交互方式进行排序和重新排序。

  3. 我的工作表按时间顺序排列,我想要一个按字母顺序排列的版本。

我已经用谷歌搜索了,答案从“你为什么要做这样的事情”(对于不同的用例)到将粘贴到范围的排序副本中的 VBA 方法。这就是我现在正在做的,减去自动化:选择数据,粘贴(使用选择性粘贴),并订购复制的版本。如果原始数据发生变化,我必须重新进行。

是否真的很少需要多次订购以至于它们不受支持,或者我错过了一些明显的东西?

4

2 回答 2

2

我一直这样做。基本上,您将所需的顺序(升序/降序)转换为未排序列表中的行索引,然后使用索引为您查找该值。

=INDEX(<insert range here>, MATCH(SMALL(COUNTIF(<insert range here>, "<"&<insert range here>), ROW(1:1)), COUNTIF(<insert range here>, "<"&<insert range here>), 0))

排序数组示例.xlsx

来源

于 2012-05-15T17:09:26.177 回答
1

你有Rank功能并结合vlookup。抱歉,我无法链接文件。但是假设您有 Range("A1:C5") 中的数据:

Rank Name Score
2    Scott 45
1    Mark  74
3    Chris 39
4    Brian 18

排名列的公式(单元格 A1)= =rank(C2,$C$2:$C$5,0)

然后在范围(“E1:G5”):

Rank   Name    Score
1      Mark    74
2      Scott   45
3      Chris   39
4      Brian   18

在哪里:

Rank column is hardcoded
Name column (F2) is  =VLOOKUP(E2,$A$2:$C$5,2,FALSE)
Score column (G2) is =VLOOKUP(E2,$A$2:$C$5,3,FALSE)
于 2012-05-15T17:00:31.363 回答