【问题标题】:Excel Sophisticated Sort - Return low/high valuesExcel 复杂排序 - 返回低/高值
【发布时间】:2013-01-07 07:25:08
【问题描述】:

我正在尝试对从 csv 文件导入的数据进行排序。数据是这样进来的:

Columns
 A | B
--------
t1 | 1
t3 | 9
t1 | 2
t2 | 5
t1 | 1
t3 | 13
t1 | 3
t3 | 11
t2 | 4
t2 | 7
t3 | 10
t3 | 10

我想要类似这样的输出:

    Columns
 D  |  E  |  F
----------------
t1  |  1  |  3
t2  |  4  |  7
t3  |  9  |  13

说明:基本上我需要做的是从 B 列中为 A 列中的每个不同值找到最低和最高值,然后将它们整齐地列出,如第二个示例所示。

我以前使用过 VBA,所以如果这必须通过 VBA 来完成,那很好。我只是不知道如何完成这项任务。任何帮助,将不胜感激。

编辑:忘了提一下,如果可以使任务更简单,如果我必须根据 col A 手动按字母顺序对数据进行排序(从而将相同的值放在一起)

【问题讨论】:

  • 这是数据透视表的完美任务
  • 您使用的是什么版本的 Excel - 不同版本设置 Pivot 的详细信息略有不同
  • 2007,同RocketDonkey

标签: excel vba sorting


【解决方案1】:

我同意@chrisneilsen 的观点,即数据透视表是最好的选择。如果您打算使用公式,您可以尝试使用以下内容(均以数组形式输入 - Ctrl+Shift+Enter):

在单元格E1 中,表示最小值:

=MIN(IF($A$1:$A$12=D1,1,MAX($B$1:$B$12)+1)*$B$1:$B$12)

在单元格F1中,将表示最大值:

=MAX(IF($A$1:$A$12=D1,1,MIN($B$1:$B$12)-1)*$B$1:$B$12)

一般的想法是检查A 列中的哪些值等于您的目标值(D 列)。结果将是一个 1 的数组,其中有一个匹配项,并以 MIN 为例,列的最大值 + 1。这样做是因为我们希望将其设置为等于可以' 不可能在您当前的设置中获得,因此最大值 + 1 将确保 MIN 将返回一个合法的值。

这是一个使用 Excel 2007 的数据透视表。要创建数据,请将列标题添加到您的数据中,选择您的数据,然后在功能区中单击 Insert -> Pivot Table。在对话框中,您决定要放置它的位置(它通常放置在新工作表中,因此您可以根据需要保留默认值 - 我将其保留在同一个工作表中以进行说明)。从那里,您可以通过拖动每个字段来排列它,使其与图片匹配。对于Max/Min 字段,只需将Value 字段拖入Values 部分两次。然后,在实际的数据透视表中,您可以右键单击该列中的一个值并选择Summarize Data By -> Min 以按每个键的最小值进行汇总:

【讨论】:

  • 我没有设置任何特定的方式,如果您认为更好/更优雅的方式是数据透视表,我愿意尝试如果您愿意告诉我如何因为我从未使用过一个大声笑
  • 另外,澄清一下,如果我使用此答案中提供的解决方案,我会手动输入 col D 中的值? (例如 t1、t2、t3 等?)
  • @DEFSoftwareSolutions 是的,忘了说您需要手动添加这些值(您可以选择整个范围,复制并粘贴到列D,然后使用Data -> Remove Duplicates 获得唯一的值。我也会放一个数据透视表的例子。
  • 太棒了,感谢您的帮助。我会将其标记为答案,并稍后会查看数据透视表。我得赶紧跑到商店给我女儿买药。我稍后会回来,再次感谢。迫不及待想看看数据透视表是如何工作的
  • @DEFSoftwareSolutions 完全没有问题 - 数据透视表是汇总数据的绝佳资源(并且比公式更具动态性)。你会学会爱他们:)
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2020-03-30
  • 2018-10-16
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多