【问题标题】:Beyond acceptable range of Nested IF & formula not working超出嵌套 IF 和公式的可接受范围不起作用
【发布时间】:2017-12-28 08:14:22
【问题描述】:

要检查的值

 |       | Northing | Easting |
 |-------|----------|---------|
 | Inst1 | 41345    | 33467.8 |
 | inst2 | 41600.5  | 33607.2 |
 | Inst3 | 41900.8  | 33740.2 |
 | Inst4 | 41933.4  | 33780   |
 | Inst5 | 41829.5  | 33694.6 |
 | Inst6 | 41449.9  | 33539   |

坐标范围

 |    | Northing |          | Easting |          |
 |----|----------|----------|---------|----------|
 | T1 | 41158.68 | 41396.88 | 33357.6 | 33517.57 |
 | T2 | 41307.9  | 41456.6  | 33384.2 | 33580.5  |
 | T3 | 41372.1  | 41517.5  | 33411.3 | 33607.5  |
 | T4 | 41431.6  | 41572.7  | 33435.8 | 33632.5  |
 | T5 | 41482.9  | 41654.6  | 33472.3 | 33654.2  |
 | S1 | 41564.9  | 41701.2  | 33493.1 | 33688.7  |
 | S2 | 41611.5  | 41762.3  | 33520.2 | 33708.3  |
 | S3 | 41672.7  | 41841.6  | 33555.5 | 33734.1  |
 | S4 | 41752.2  | 41897.9  | 33580.6 | 33767.6  |
 | S5 | 41809.3  | 41941.7  | 33600.1 | 33791.7  |
 | S6 | 41854.6  | 41998.7  | 33625.4 | 33810.7  |
 | T6 | 41914.8  | 42055.4  | 33650.7 | 33836.1  |
 | T7 | 41971.5  | 42137.4  | 33687.2 | 33859.9  |

嵌套的 IF 没有显示正确的值并且不能超出第 48 行。

我怎样才能包含范围 M41:Q53?

下面的当前公式

=IF(N41<=$H$41<=O41 & P41<=$I$41<=Q41,M41,IF(N42<=$H$41<=O42 & 
P42<=$I$41<=Q42,M42,IF(N43<=$H$41<=O43 & 
P43<=$I$41<=Q43,M43,IF(N44<=$H$41<=O44 & 
P44<=$I$41<=Q44,M44,IF(N45<=$H$41<=O45 & 
P45<=$I$41<=Q45,M45,IF(N46<=$H$41<=O46 & 
P46<=$I$41<=Q46,M46,IF(N47<=$H$41<=O47 & 
P47<=$I$41<=Q47,M47,IF(N48<=$H$41<=O48 & P48<=$I$41<=Q48,M48,"Not 
here"))))))))

【问题讨论】:

  • 这里有两个问题吗? 1) 为什么公式对现有范围给出错误的结果 2) 为什么我不能扩展公式以包含 M41:Q53?此外,您是否收到任何类型的错误消息/警告?您使用的是什么版本的 Excel? (允许的嵌套 If 数量有不同的限制。)
  • 是的,这是两个相关的问题。如果我进一步扩展嵌套,我会收到错误消息。但现在。在其当前范围内。它应该显示 T2,但它只显示“不在此处”。哪个是假值。
  • 错误信息是什么,您使用的是什么版本的 Excel?
  • 所以您已经达到了嵌套 IF 的 64 级别,这表明该问题需要您部署一些 alternative strategies。不过,看看公式,它似乎并不那么深!我在发布的公式中看到了 8 个级别的 IF(随着您向下 J 列,这会变得更加嵌套吗?)
  • 你能解释一下最终目标是什么吗?不管是什么,我可以保证有比这种疯狂嵌套更好的方法。您是否要确定一个点是否在多边形内?

标签: excel excel-formula nested-if


【解决方案1】:

比较坐标时,坐标系的选择并没有太大的改变逻辑。 :-)

始终检查一个点是否在多边形内可能很棘手(但并非不可能),但是像这样的普通矩形很简单。如果您打算比较多个坐标,那么nested If's 将不起作用。 (事实上​​,应该始终避免使用它们!)

对于我的 quick-n-dirty 示例,我将您的数据放入 Columns vs Rows 而不是并排放置。

公式为H6为:

=IF(AND(H$3>=MIN($C6:$D6),H$3<=MAX($C6:$D6),H$4>=MIN($E6:$F6),H$4<=MAX($E6:$F6)),"Match","-")

基本上只是检查:

  1. Northing To Match 是否大于或等于 NorthingStart 和 NorthingEnd 的 `MIN?

  2. Northing To Match 是否小于或等于 `NorthingStart & NorthingEnd 的最大值?

    • 如果两者都Yes,则点Northing to Match在指定的矩形内。

还有许多其他方法也可以解决这个问题。哪一个是正确的主要取决于您要比较的数据量,以及它是否是持续需要(需要考虑到不可预见的情况)...

借助数组公式,并行数据集也可以完成同样的事情。

进一步阅读:


还有一个切线(不是双关语),但是因为我提到它并且只是为了好玩,所以简短解释一下:

如何检查给定点是在多边形内部还是外部?

1. Draw a horizontal line to the right of each point and extend it to infinity

2. Count the number of times the line intersects with polygon edges.

3. A point is inside the polygon if either count of intersections is odd or
   point lies on an edge of polygon.  If none of the conditions is true, then 
   point lies outside.

如何处理上图中的g点?

请注意,如果该点位于直线上或同一直线上,我们应该返回 true 作为给定多边形的vertices 之一。为了处理这个,之后 检查从p 到extreme 的线是否相交,我们检查是否 p 是 colinear 与当前多边形线的顶点。如果是 共线,然后我们检查点p 是否位于当前侧 多边形,如果它位于,我们返回 true,否则返回 false。 (Source)

【讨论】:

  • 嗯,你从我这里得到了加一。我还在为数组公式苦苦挣扎!
  • @QHarr 啊,我敢肯定,如果我们尝试一下,我们会很好地解决这个问题……再一次,哈哈
  • 大声笑。我不擅长失败,尽管我经常经历失败!我已经创建了一个数组,它告诉我匹配在哪里,但我仍在试图弄清楚如何将该数组减少到只有匹配的元素。我在考虑 SMALL 或 LARGE 功能,但还没有。
  • 此问题的其他潜在标签:geometry-surfacecartesian-coordinates
  • @QHarr - 这里也一样,可能只是因为我对它还没有真正的需求或兴趣。 (这就是我将数据从 Excel 移动到 Access 的重点,因为这样做更容易,而不是冗长、丑陋的公式!)但总有一天我会弄明白的......地狱,一对几周前我根本不知道表面几何是什么,哈哈。
猜你喜欢
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
相关资源
最近更新 更多