Indexing 应用IF和not匹配时如何使用索引?

Indexing 应用IF和not匹配时如何使用索引?,indexing,match,coordinates,libreoffice-calc,Indexing,Match,Coordinates,Libreoffice Calc,LibreOffice Calc中有两个数据集,其中包含平面中对象的笛卡尔坐标。一个是包含X个对象的旧数据,另一个是包含相同X个对象+N个新对象的新数据 Excel电子表格: A B C D || E F G | | | | || | | | 1 - New ID Previous I

LibreOffice Calc中有两个数据集,其中包含平面中对象的笛卡尔坐标。一个是包含X个对象的旧数据,另一个是包含相同X个对象+N个新对象的新数据

Excel电子表格:

      A          B          C          D     ||    E       F        G
      |          |          |          |     ||    |       |        |
1 - New ID  Previous ID  X Value    Y Value  || Old ID  X Value  Y Value
2 -  1a          ?        89.09      73.79   ||   1a     52.60    94.15 
3 -  1b          ?        52.50      94.05   ||   1b     81.20    28.49
4 -  1c          ?        36.72      94.85   ||   2a     91.04    38.93
5 -  2a          ?        81.14      28.38   ||   3a     68.65    84.64
6 -  2b          ?        07.50      46.69   ||   3b     64.50    37.18
7 -  3a          ?        90.72      39.00   ||   4a     18.36    03.65
对于每个旧对象的坐标(F列和G列),我想遍历所有新对象的坐标(C列和D列),看看两者之间的距离D是否很小(对于我来说,小于
1
的值就足够了)

如果d<1,这意味着它们是同一个对象,我想在B列中记录它的
旧ID

=IF(SQRT((C2-$F$2)^2+(D2-$G$2)^2)<1,$E$2,0)

=IF(SQRT((C2-$F$2)^2+(D2-$G$2)^2)在单元格B2中复制,您将需要这两个公式中的一个。我对您要查找的确切内容有点模糊,但我相信其中一个将适合:

=IFERROR(INDEX($E$2:$E$7,MATCH(TRUE,INDEX(SQRT((C2-$F$2:$F$7)^2+(D2-$G$2:$G$7)^2)<1,),0)),"No Match")

=IFERROR(索引($E$2:$E$7,匹配)(真,索引(SQRT((C2-$F$2:$F$7)^2+(D2-$G$2:$G$7)^2)在Excel中,这个公式对我有效


=索引(E$2:E$200,匹配(TRUE,索引(SQRT((C2-F$2:F$200)^2+(D2-G$2:G$200)^2)嘿,tigeravatar-Snap!你比我快了3秒…包括错误检查,我忘了…顺便说一句,我想这是第一个哇,是的,完全相同的解决方案,哈哈!@tigeravatar@barryh你在我的样本数据上测试了你的公式吗?方程似乎对我不起作用。你的平方根中的术语
$F2:$F$7
选择当前正在查看的行中该范围内的任一单元格,即,
C4-$F$2:$F$7
C4-F4
相同。
是否匹配
在该范围内搜索
$F$2:$F$7
,因为我能想到的唯一错误是没有检查整个列,只有行中相应的单元格被选中oked at.我正在使用LibreOffice,但这些公式规则在它和Excel之间没有区别…公式当然在Excel中工作,它需要“输入数组”-我相信你可以在Libre Office中使用这些公式,但我可以很快尝试一个测试…通过使用C4-$F$2:$F$7,你会得到一个包含6个结果的数组,F2:F7中每行一个,然后MATCH会找到你的条件为真的第一行对不起,我们使用了一个避免数组条目的构造(一个额外的索引函数)因此,您不需要在excel中输入数组……但Libre Office在这方面可能不起同样的作用-让我检查一下坚持使用它并解决Libre Office问题的方法:)我想我应该提到我是从LibreOffice开始工作的。@barry,你的excel公式在excel中对我有效,所以至少我可以在我的家用电脑上完成这部分工作。但是,你的LibreOffice计算公式返回了
E
列中的任何值,即它基本上重复了
E
列中的
列ode>B
。我还试图理解这个公式是如何工作的,我不确定我是否遵循了:
行(F$2:F$200)
似乎返回一个值2,而不管它在列中的哪个位置被计算,如果它是真的,你的
IF
语句返回的值是
1
如果它是假的?听起来你可能没有用CTRL+SHIFT+ENTER确认-如果你做得正确,你会得到像{和}这样的“大括号”关于公式-有时我在Libre Office中很难做到这一点-我必须进入“插入”选项并勾选“数组公式”框。我将添加到我的答案中,以解释该公式是如何工作的Hi barry。CTRL+SHIFT+ENTER似乎对我没有任何帮助,但您对Microsoft Excel的建议效果很好。
=IFERROR(INDEX($E$2:$E$7,MATCH(TRUE,INDEX(SQRT((C2-$F$2:$F$7)^2+(D2-$G$2:$G$7)^2)<1,),0)),"No Match")
=IFERROR(INDEX($E$2:$E$7,MATCH(TRUE,INDEX(SQRT(($C$2:$C$7-F2)^2+($D$2:$D$7-G2)^2)<1,),0)),"No match")