如何在应用IF而不是MATCH时使用INDEX?

时间:2015-01-28 17:54:05

标签: indexing coordinates match openoffice-calc libreoffice-calc

我已经找到了答案,但我认为我的问题可能有点过于具体。

我在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 = SQRT( (X2-X1)^2 + (Y2-Y1)^2 )

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

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

当我点击并拖动直到出现ID时,上面的公式适用于一个对象;但是,我必须复制和粘贴很多东西以继续这种方法。 问题是我有大约260个新对象来搜索大约180个旧对象。手动点击并拖动太费力了。

我还没有能够想出一种方法来使用VLOOKUP或INDEX告诉excel&#34;对于单元格F2和G2中的这些X和Y值,请检查C2和D2中的值。如果d是&lt; 1然后打印E2。如果没有,请检查F3和G3并打印E3,如果它是真的等等等,直到找到匹配为止。&#34; 有没有人对如何使这个工作有任何建议?

我试图尽可能清楚地解释我想要做的事情。如果这令人困惑,我很抱歉。我知道如果旧数据和新数据中的对象的坐标完全相同,那么我可以使用INDEX MATCH组合但不幸的是它们确实略有不同。

2 个答案:

答案 0 :(得分:4)

在单元格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(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")

答案 1 :(得分:2)

在Excel中,这个公式适用于我

=INDEX(E$2:E$200,MATCH(TRUE,INDEX(SQRT((C2-F$2:F$200)^2+(D2-G$2:G$200)^2)<1,0),0))

这会将您的公式应用于F/GC2D2进行比较的每一对,而MATCH - <1会找到该值为INDEX的第一行和{ {1}}会从列E

返回所需的ID

在Libre Office中,我无法使MATCH函数与数组一起工作,但此版本按要求执行:

=INDEX(E$2:E$200,SMALL(IF(SQRT((C2-F$2:F$200)^2+(D2-G$2:G$200)^2)<1,ROW(F$2:F$200)-ROW(F$2)+1),1))

使用 CTRL + SHIFT + ENTER确认

在后一个公式中,如果C2D2值为FG,则会针对ROW(F$2:F$200)-ROW(F$2)+1SMALL计算等式,如果它返回值< 1然后SMALL,返回该范围内该行的相对行号(例如,第2行是第一行,因此返回1,第30行是第29行,因此返回29)。

然而,许多行“匹配”MIN只会返回最小的行(MIN函数优于INDEX,因为{{1}}如果没有则会给出零结果行匹配,在这种情况下更好地获得错误)。

{{1}}函数然后返回该行的相应值