【问题标题】:How to find minimum and maximum values in Column B based on a specific string in column A?如何根据 A 列中的特定字符串查找 B 列中的最小值和最大值?
【发布时间】:2016-05-14 18:48:12
【问题描述】:

我在 A 列中有一个项目列表,在 B 列和 C 列中分别有相应的年份和月份值。我希望在 B 列中找到最小和最大年份(基于 A 列中的特定值),然后在 C 列中找到相应的月份(仅用于最大值和最小值),然后生成并填写开始和结束日期分别在 E 列和 F 列中。 例如。 IF @Item = Laptop THEN FIND MIN,MAX of @YEAR 然后在 @Month 中找到相邻值。最后相应地制定并显示日期。 我可以使用公式来实现这一点,还是超出范围而使用宏更好地实现?

【问题讨论】:

    标签: excel excel-formula vba


    【解决方案1】:

    对于开始日期,在 E2 中:

    =IF(A2<>A1,DATE(AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(15,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(15,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),"")
    

    对于 F2 中的结束日期:

    =IF(A2<>A1,EOMONTH(DATE(AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1),AGGREGATE(14,6,$C$1:$C$1000/(($A$1:$A$1000=A2)*($B$1:$B$1000 = AGGREGATE(14,6,$B$1:$B$1000/($A$1:$A$1000=A2),1))),1),1),0),"")
    

    然后复制所需的行。

    聚合函数是在 2010 年引入的,因此它不适用于 excel 2007 或更早版本。

    我过度认为它们可以简化为:

    =IF(A2<>A1,AGGREGATE(15,6,DATE($B$1:$B$1000,$C$1:$C$1000,1)/($A$1:$A$1000=A2),1),"")
    

    还有:

    =IF(A2<>A1,AGGREGATE(14,6,EOMONTH(DATE($B$1:$B$1000,$C$1:$C$1000,1),0)/($A$1:$A$1000=A2),1),"")
    

    感谢@Jerry 展示了更简洁的方法。

    【讨论】:

    • 感谢您的公式!如果我只是想在整个范围内应用公式,我是否只是想用单元格(例如 A1)替换字符串“笔记本电脑”?
    • @user1266515 查看编辑。放入 E2 和 F2 并复制下来,它将在正确的行中放入空白,在第一行中的值带有一个新项目。
    【解决方案2】:

    这是我认为适用于任何版本的 Excel 的东西,感谢 @ScottCarver 的评论,您现在可以将其复制下来,它会将日期放在每个项目的第一行:

    在 E2 中输入这个作为数组公式,然后复制下来:

    =IF(A2<>A1,MIN(IF(A:A=A2,DATE(B:B,C:C,1))),"")
    

    在F2中输入这个作为数组公式然后复制下来:

    =IF(A2<>A1,MAX(IF(A:A=A2,DATE(B:B,C:C+1,0))),"")
    

    因为这些是数组公式,您需要按 control-shift-enter 而不是只输入。输入后会被 { } 包围,表示是数组公式。

     

    原答案:

    我认为以下内容适用于任何版本的 Excel,但您不能将其复制下来 - 您必须为每个项目单独输入一个。如果您真的希望它们分散开,以便日期位于项目第一次出现的行上(如您的屏幕截图中所示),那么这对您不起作用。

    笔记本电脑项目的开始日期:

    =MIN(IF(A:A="Laptop",DATE(B:B,C:C,1)))
    

    笔记本电脑项目的结束日期:

    =MAX(IF(A:A="Laptop",DATE(B:B,C:C+1,0)))
    

    这些是数组公式,因此您需要按 control-shift-enter 而不是只输入。输入后会被 { } 包围,表示是数组公式。

    【讨论】:

    • 当我在开始日期单元格中输入这个时,我只得到一个 0。尝试完成计算步骤
    • @user1266515 确保将其作为数组公式输入。您可能还需要将单元格格式化为日期。
    • 所以我又想多了。你可以复制下来,用=IF(A2&lt;&gt;A1,MIN(IF(A:A=A2,DATE(B:B,C:C,1))),"")
    • @ScottCraner 你说得对。我怎么没想到呢?
    • 我希望你不介意我将你的方法与聚合函数结合起来。
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多