【问题标题】:Get the maximum values of column B per each distinct value of column A根据 A 列的每个不同值获取 B 列的最大值
【发布时间】:2015-06-09 13:02:06
【问题描述】:

我有一个表格的 Excel 电子表格:

A,B
X,1
X,5
Y,4
Y,11
X,7
Z,1

我想为 A 列的每个不同值获取 B 列的最大值 - 如何通过纯 Excel 公式来实现

想要的结果(顺序无关):

A,B
Y,11
X,7
Z,1

换句话说,我想要 Excel 版本的 SQL 查询

SELECT   A,max(B)
FROM     myTable
GROUP BY A

任何版本的 Excel 都可以接受,但我使用 365 版本。

数据透视表是一种可接受的方法(我目前自己使用数据透视表),但 我更喜欢真正的公式 - 问题的主要目标是增强我对公式编程的理解Excel。 没有 VBA

【问题讨论】:

  • 我希望这是不言而喻的,但澄清一下:依赖于公式中 A 列中的硬编码单个值的公式对于任何想象都是不可接受的。

标签: excel excel-formula


【解决方案1】:

Gary 的学生的答案是正确的。我添加了一些东西。

另外,该方法的链接: http://blog.contextures.com/archives/2011/07/27/finding-min-if-or-max-if-in-excel/

可以通过多种方式生成不同的值列表,这是一种:

这里是指向不同列表的一两个方法的链接。全部带有数组公式:

Ignore Duplicates and Create New List of Unique Values in Excel

Getting unique values in Excel by using formulas only

【讨论】:

  • 这绝对是对 Garys 答案的重大改进,但您没有使用公式生成列 E,因此您的答案似乎(至少没有显示 E 是如何获得的)需要硬编码值也是。如果不正确,请在 E 上展开。
  • 生成不同值的数组公式只是为我输入的所有单元格返回A1 的值。 i.imgur.com/q7vwXSQ.jpg
  • 这很有趣。我会仔细检查公式。如果每个单元格中的公式完全相同,我可以复制您的问题。你粘贴到E2然后向下拖动吗?这样做应该正确地利用相对和绝对引用。
  • 好吧,我知道我做错了什么。我将公式作为从 e2 到 e4 的单个数组输入,而不是输入一次然后将其复制下来。
  • 只是为了让事情变得整洁,我会将您的公式包装在 iserror(yourformula,"")
【解决方案2】:

AB 列中的数据使用 数组公式

=MAX(IF(A1:A6="x",B1:B6))

“y”和“z”相同

数组公式必须使用 Ctrl + Shift + Enter 而不仅仅是 Enter 键。

注意公式栏中的大括号

编辑#1:

要自动生成公式,首先将列 A 复制到列 C

然后使用数据选项卡中的删除重复功能:

然后在单元格D1中输入数组公式

=MAX(IF(A$1:A$14=C1,B$1:B$14))

然后抄下来:

公式只输入一次,然后复制下来!

【讨论】:

  • 我是否正确,如果我在 A 中有 100 个不同的值,我必须使用您的解决方案手动编写 100 个不同的公式?
  • @DVK 仅当您想使用公式时。 数据透视表将使用公式生成信息!
  • @DVK 有一种方法可以自动生成 100 个公式(无需输入每个公式)!
  • 如果您可以展示如何使用公式生成并将它们放入电子表格中,我不仅会改变我的投票,而且很可能会接受这样的答案:)
  • @DVK 查看我的 EDIT#1
【解决方案3】:

数据透视表是正确答案。

  1. 选择 A 列的标题并将其拖到“行标签”部分。
  2. 选择 B 列的标题并将其拖到“值”部分。
  3. 单击值部分中 B 列标题上的箭头,然后选择值字段设置。
  4. 选择最大值

【讨论】:

  • 这个问题非常明确地指出,数据透视表不是一个“正确”的答案。这是可以接受的,因为它确实有效,但提出问题的主要原因是学习如何通过公式来做 - 我已经知道我可以通过枢轴来做。
  • 问题是“数据透视表是一种可接受的方法”。我认为这意味着它们是完成任务的可接受途径。在这种情况下,它们是迄今为止最好的选择,除非您想按照 Gary 的学生的建议输入多个数组公式。
  • 我不是在反对你使用枢轴,而是反对你对“正确”的描述。 “正确”是一种取决于特定背景的主观评价——在我的问题的背景下,它远非“正确”。只是“嗯,好的”——我主要是把它添加为好的,因为有些人非常讨厌带有任意“不能使用方法 X”限制的问题,假设它们是家庭作业问题。
  • 误解了您当时如何措辞数据透视表条件。不用担心。正如其他答案所示,有一些方法可以解决它们,但恕我直言,它们都非常笨拙,并且随着数据集的增长无法很好地扩展。
【解决方案4】:

试试下面。请注意,我已将您所需的输出表移至 D 和 E 列。您无需将任何值硬编码到公式中。

数据

D   E
Y   11
X   7
Z   1

公式

E2 Formula: ={MAX(--($D1=A1:A6)*B1:B6)}
E3 Formula: ={MAX(--($D2=A2:A7)*B2:B7)}
E4 Formula: ={MAX(--($D3=A3:A8)*B3:B8)}

【讨论】:

  • 如何生成 D?
  • 我不清楚您在类似摘要的表中还没有值。如果您尝试在没有 D 的情况下填充 E,您可以在单元格 D2 中使用以下公式并填写 ={INDEX($A$2:$A$7, MATCH(0, COUNTIF($D$1:D1, $A$2:$A$7), 0))}
  • 如果你使用 * 那么 -- 是多余的,使用这个公式就足够了: ={MAX(($D1=A1:A6)*B1:B6)} - 但一般来说最好按照其他答案中的建议使用 IF,因为如果最大值为负,则此公式不会给出正确答案
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2019-08-27
  • 1970-01-01
  • 2023-02-07
  • 2021-01-25
  • 1970-01-01
  • 2019-11-13
  • 2015-06-06
相关资源
最近更新 更多