【问题标题】:Excel: Check to see if Two Values are Between Two Other ValuesExcel:检查两个值是否在两个其他值之间
【发布时间】:2018-07-31 01:24:53
【问题描述】:

我一直在做噩梦,试图找到解决这个问题的方法,希望各位巫师能提供帮助。

在下面的示例中,我有一个数据集(A 到 C 列)和参考列(F 到 H)。 D 列是公式的所需输出。此列已填充了我想要的输出示例。

表 1。

表 1 显示了我的数据集。我的目标是在column D 中生成(使用公式)输出,该输出对columns B & C 中的rows 2-14 中的数据是否属于columns G & H 中我的参考数据集的开始和结束参数进行分类。如果为 true,则公式应返回 column F 中所示的行号,其中 column D 中存在匹配项。

使用IF(AND( 公式,只要 B 和 C 的开头和结尾分别是 >= to G<= to H,我就能弄清楚如何做到这一点,但我终生无法弄清楚如何做到这一点如果第 3 行的开始和结束部分位于第 1 行之外,则执行此操作。示例:=IF(AND(B2>=$G$2,C2<=$H$2),$F$2,IF(AND(B2>=$G$3,C2<=$H$3),$F$3,"<null>"))

如下面的Figure 1 所示,第 1 行显示了“G2:H2”中描述的边界,而第 2 行显示了“G3:H3”中描述的边界。我的目标是查看第 3 行和第 4 行是否与第 1 行或第 2 行重叠,并输出一个变量,如“D 列”所示。任何帮助将非常感激。谢谢。

图 1。

我不想被一个糟糕的数据集打败。

【问题讨论】:

  • 你所说的重叠是什么意思。有重叠吗?完全重叠?
  • 部分重叠必须使用 OR 而不是 AND。 AND 表示整个重叠!
  • 任何重叠,抱歉我应该指定。如果我将上面列出的公式更改为 OR,它们都会导致第 1 行不正确。

标签: excel excel-formula


【解决方案1】:

另一个,

=IF(NOT(OR(OR(AND(B2>=S$2,B2<=T$2),AND(C2>=S$2,C2<=T$2)), OR(AND(B2>=S$3,B2<=T$3),AND(C2>=S$3,C2<=T$3)))), "<null>", 
    SUBSTITUTE(TRIM(IF(OR(AND(B2>=S$2, B2<=T$2), AND(C2>=S$2, C2<=T$2)), 1, TEXT(,))&CHAR(32)&
                    IF(OR(AND(B2>=S$3, B2<=T$3), AND(C2>=S$3, C2<=T$3)), 2, TEXT(,))), CHAR(32), " & "))

【讨论】:

  • 谢谢您,先生。我会将其标记为正确,因为您是第一个回复的。我真的很感激你的帮助!是时候进行逆向工程并从您的代码中学习了。
【解决方案2】:

功能齐全,虽然有点冗长。

=IF(IF(OR(AND(B2>=$G$2,B2<=$H$2),AND(C2>=$G$2,C2<=$H$2)),$F$2,"")&IF(OR(AND(B2>=$G$3,B2<=$H$3),AND(C2>=$G$3,C2<=$H$3)),$F$3,"")<>"",IF(OR(AND(B2>=$G$2,B2<=$H$2),AND(C2>=$G$2,C2<=$H$2)),$F$2&IF(OR(AND(B2>=$G$3,B2<=$H$3),AND(C2>=$G$3,C2<=$H$3))=TRUE," & ",""),"")&IF(OR(AND(B2>=$G$3,B2<=$H$3),AND(C2>=$G$3,C2<=$H$3)),$F$3,""),"<Null>")

【讨论】:

  • 你的公式也很有效。我已将 Jeeped 的答案标记为正确,因为他比您快 1 分钟 :( 非常感谢您的帮助。我投票表示感谢。
【解决方案3】:

遗漏是没有检查有问题的行 (B&C) 的可能性 跨越了其他两个线段。另外,这个检查需要先做:

IF(AND(B12>=L1Start,B12<=L1End,C12>=L2Start,C12<=L2End),"1 & 2",IF(AND(B12>=L1Start,B12<=L1End),1,IF(AND(B12>=L2Start,B12<=L2End),2,"<null>")))

为了便于阅读,我将开始和停止单元格命名为 L1Start 和 L1End、L2Start 和 L2Endals,除非 Col F 中的行号发生更改,否则我也会对它们进行强化,但如果需要,可以很容易地将它们更改为相应的单元格引用-- 否则原始声明与提供的差不多。

这是我的结果:

希望对您有所帮助...

祝你好运。

【讨论】:

    【解决方案4】:

    解决方案:

    单元格 D2:Mac 中的=IF(AND(OR(AND((B2&lt;$G$2);(C2&gt;$G$2));AND((B2&gt;$G$2);(B2&lt;$H$2)));OR(AND((B2&lt;$G$3);(C2&gt;$G$3));AND((B2&gt;$G$3);(C2&lt;$H$3))));"1 &amp; 2";IF(OR(AND((B2&lt;$G$2);(C2&gt;$G$2));AND((B2&gt;$G$2);(B2&lt;$H$2)));"1";IF(OR(AND((B2&lt;$G$3);(C2&gt;$G$3));AND((B2&gt;$G$3);(C2&lt;$H$3)));"2";"&lt;null&gt;")))

    单元格 D2:Windows 中的 =IF(AND(OR(AND((B2&lt;$G$2),(C2&gt;$G$2)),AND((B2&gt;$G$2),(B2&lt;$H$2))),OR(AND((B2&lt;$G$3),(C2&gt;$G$3)),AND((B2&gt;$G$3),(C2&lt;$H$3)))),"1 &amp; 2",IF(OR(AND((B2&lt;$G$2),(C2&gt;$G$2)),AND((B2&gt;$G$2),(B2&lt;$H$2))),"1",IF(OR(AND((B2&lt;$G$3),(C2&gt;$G$3)),AND((B2&gt;$G$3),(C2&lt;$H$3))),"2","&lt;null&gt;")))

    显然,您必须复制到 D14,并且只有 B 行和 C 单元格应该更改。

    【讨论】:

    • OP 的示例使用逗号作为区域列表分隔符。
    • 很遗憾 Fred 我无法让您的代码正常工作。尽管如此,还是感谢您的帮助!
    • 天哪..你不能改变“;”对于“,”?
    【解决方案5】:

    认为如果您要添加更多行,这会更好地扩展

    【讨论】:

      猜你喜欢
      • 2019-03-23
      • 1970-01-01
      • 2013-09-06
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 2022-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多