Indexing 应用IF和not匹配时如何使用索引?
LibreOffice Calc中有两个数据集,其中包含平面中对象的笛卡尔坐标。一个是包含X个对象的旧数据,另一个是包含相同X个对象+N个新对象的新数据 Excel电子表格: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
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")