【问题标题】:formula to sort months - using helper column对月份进行排序的公式 - 使用辅助列
【发布时间】:2017-05-07 18:18:22
【问题描述】:

我正在尝试使用辅助列根据某些条件(最低温度/最高温度和允许的最高温度列)对表进行排序,但是我无法让它工作,它不必使用帮助栏,但这是我尝试的方式。

我想要得到的是红色的预期结果

我的 l2(下拉)是

=COUNTIFS(B$2:B$11,"<="&$B2)

我的 J2(下拉)是

=INDEX($B$2:$B$10,MATCH(ROWS($I$2:I2),$I$2:$I$8,0))

试过了

=COUNTIFS(B$2:B$11,"<="&$B2,B$2:B$11,"<="&$G$3)

我想考虑 g3,g4,g5 中的值, 有序列表(预期结果)中的第一个项目(月)是按升序(从小到大)小于或等于 g3 的项目。 列表中的第二个项目是大于 g3 但小于 g4 的项目,并且在 G5 中指定了项目的限制

【问题讨论】:

  • J12:J18 数据你能再清楚一点吗?你是怎么想出每个月的?
  • 一月 (8) 之后,二月 (7) 是如何到来的?
  • @GowthamShiva 应该是 2 月 7 日,1 月 8 日
  • 更新了图片和描述

标签: excel excel-formula vba


【解决方案1】:

为了处理重复值, 辅助列用于制作唯一键, 其中包括月份编号,并使用SMALL() 函数对其进行排序。 假设 A2:A11 中的月份名称是文本(不是日期值,格式为“MMM”) J2 中的数组公式并向下拖动到 J11

=SMALL(MONTH(DATEVALUE("1"&$A$2:$A$11&" 2001"))+ROUND(($B$2:$B$11+300)*1000,-2),ROW(I2)-ROW($I$1))

假设温度值仅四舍五入到小数点后一位, 该值已调整 (+300) 以处理负温度, 向左移动 (*1000) 并添加月份。

D2:

=IF(E2<=$H$3,TEXT(DATE(2001,MOD($J2,100),1),"MMM")," ")

E2:

=IF(ROUND($J2/1000-300,1)<=$H$3,ROUND($J2/1000,1)-300," ")

D3 并向下拖动到D11

=IF(OR(E3<=$H$3,AND(E3>$H$3,E3<$H$4,COUNTIF(E$2:E2,">"&$H$3)<$H$5)),TEXT(DATE(2001,MOD($J3,100),1),"MMM")," ")

E3 并向下拖动到E11

=IF(OR(ROUND($J3/1000-300,1)<=$H$3,AND(ROUND($J3/1000-300,1)>$H$3,ROUND($J3/1000-300,1)<$H$4,COUNTIF(E$2:E2,">"&$H$3)<$H$5)),ROUND($J3/1000-300,1)," ")    

D2:D11 中的可选条件格式:

E2:E11 中的可选条件:

【讨论】:

  • 完美运行,只有一个问题。您将如何更改公式以使排序变得通用(如果您将月份的名称命名为其他任何仍然有效的名称)。谢谢
  • @Athanatos:感谢您的坚持。好吧,通用排序将大大改变原始问题。此答案中使用的方法受益于特定的数据,并且需要进行一些重大更改。一般排序本身就是一个有趣的问题,可能需要处理广泛的细微差别。
【解决方案2】:

请检查这些公式。它应该适合你,

column J 中的公式,

=IF(SMALL($B$2:$B$10,ROW(1:1))&lt;=$G$3,SMALL($B$2:$B$10,ROW(1:1)),IF(AND(SMALL($B$2:$B$10,ROW(1:1))&lt;=$G$4,COUNTIF($J$2:$J2,"&gt;" &amp; $G$3)&lt;$G$5),SMALL($B$2:$B$10,ROW(1:1)),""))

column I 中的公式,

=INDEX(A:A,MATCH(J3,B:B,0),1)

希望这会有所帮助。如果您需要任何信息,请告诉我。

【讨论】:

  • 有一个问题:如果有非唯一的温度读数(例如示例中的Apr=11Sep=11),它们对应的月份显示相同(Apr)。
猜你喜欢
  • 2023-03-30
  • 2018-07-03
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-14
相关资源
最近更新 更多