计算大数据集中三维坐标之间的距离…轻微扭曲

我试图用excel来计算x,y和z坐标两点之间的距离,使用公式distance = SQRT((X1-X2)^ 2 +(Y1-Y2)^ 2 +(Z1-Z2)^ 2 ))。 该公式对单个计算工作得很好我的问题在于我能够将此公式应用于类似于所附图像的大型表格。 (对angular线应该等于零)

我有的表格和我想要的表格的例子:

在这里输入图像说明

有没有可能在Excel中做到这一点? 任何有识之士将不胜感激。 谢谢,德里克

好的,我要做两件事 – (1)提出解决scheme,(2)教你如何解决未来如何做。

好的,有些人已经表示VLOOKUP是你的朋友,但是当使用这个时,最好在自己的页面上放置你的查找图表,这样以后你可以很容易地展开它,但是如果你想在结果页面上显示这两个例子,以及。

还要记住,程序爱数字 – 所以只要你可以用可理解的数字replacestring,这样做可以加快处理速度。

所以在我的例子中,我把自己的城市图表放在自己的表格(CityChart)上,如下所示

City | X | Y | Z 1 1 1 1 2 3 4 6 3 6 7 3 4 3 5 6 6 10 5 20 

因此,您要做的第一件事就是确保您可以按照您期望的方式从查找图表中检索数据。 所以在另一张纸上,我们创build一个距离图表如下:

 City | 1 | 2 | 3 | 4 | 6 | etc ... 1 2 3 4 6 etc... 

然后在位置1,1我们做基本的查找以得到X1

X1 => = VLOOKUP($ A2,'CityChart'!$ A $ 2:$ D $ 6,2)

 $A2 Means grab the column City number 'CityChart'!$A$2:$D$6 Means use the lookup chart on sheet (CityChart) with this range. As stated this makes it easier to expand later on. 2 Means in the CityChart get the value from column 2 -- and if you look that is our column labeled X $ Means freeze the following value when copying 

按和它显示的值应该是:1

现在你可以从1,1复制这个单元格并粘贴到2,1到6,1,你应该从你的CityChart得到相应的结果

现在将没有=符号的公式复制到单元格中供以后参考

 VLOOKUP($A2, 'CityChart'!$A$2:$D$6, 2) 

我们征服了一个障碍。

现在我们需要得到X2

基本上是相同的公式,但不是抓住第1列,我们抓住第1行如下 – 再次在我们写的单元格1,1

 X2 => =VLOOKUP(B$1, 'CityChart'!$A$2:$D$6, 2) 

validation它的工作原理,将其复制到单元格1,2到1,6以确保它返回适当的值,然后复制公式以供以后参考

我们现在有…

 X1 => =VLOOKUP($A2, 'CityChart'!$A$2:$D$6, 2) X2 => =VLOOKUP(B$1, 'CityChart'!$A$2:$D$6, 2) 

因此,我们需要将这个外推到Y和Z或CityChart列3和4,如下所示:

 X1 => VLOOKUP($A2, 'CityChart'!$A$2:$D$6, 2) X2 => VLOOKUP(B$1, 'CityChart'!$A$2:$D$6, 2) Y1 => VLOOKUP($A2, 'CityChart'!$A$2:$D$6, 3) Y2 => VLOOKUP(B$1, 'CityChart'!$A$2:$D$6, 3) Z1 => VLOOKUP($A2, 'CityChart'!$A$2:$D$6, 4) Z2 => VLOOKUP(B$1, 'CityChart'!$A$2:$D$6, 4) 

现在,我们需要扩大这一点,并走向你的公式。 我们从设置两个封装()开始,然后复制/粘贴我们的引用,并添加减号

 (X1 - X2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,2) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,2)) (Y1 - Y2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,3) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,3)) (Z1 - Z2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,4) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,4)) 

为什么这个系统地好,以避免在你的公式错误 – 如果你仔细观察,你会看到你有一个太多“)”

接下来我们将^ 2加到最后

 (X1 - X2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,2) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,2))^2 (Y1 - Y2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,3) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,3))^2 (Z1 - Z2) => (VLOOKUP($A2,'CityChart'!$A$2:$D$6,4) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,4))^2 

然后剩下的就是把它和+符号一起放到你的SQRT()函数中

 SQRT( (VLOOKUP($A2,'CityChart'!$A$2:$D$6,2) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,2))^2 + (VLOOKUP($A2,'CityChart'!$A$2:$D$6,3) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,3))^2 + (VLOOKUP($A2,'CityChart'!$A$2:$D$6,4) - VLOOKUP(B$1,'CityChart'!$A$2:$D$6,4))^2 ) 

一旦你有完整的公式复制它,并将其放置在单元格1,1内的=号之前,然后按回车你应该得到0

然后将其复制并粘贴到整行或全列 – 然后复制整行/列,并突出显示剩余的单元格和粘贴 – 中提琴快速简单的扩展代码。

下面的公式应该工作。

 =SQRT((VLOOKUP(NUMBERVALUE(RIGHT($A11,1)),$A$2:$D$6,2,FALSE)- (VLOOKUP(NUMBERVALUE(RIGHT(B$10,1)),$A$2:$D$6,2,FALSE)))^2+ (VLOOKUP(NUMBERVALUE(RIGHT($A11,1)),$A$2:$D$6,3,FALSE)- (VLOOKUP(NUMBERVALUE(RIGHT(B$10,1)),$A$2:$D$6,3,FALSE)))^2+ (VLOOKUP(NUMBERVALUE(RIGHT($A11,1)),$A$2:$D$6,4,FALSE)- (VLOOKUP(NUMBERVALUE(RIGHT(B$10,1)),$A$2:$D$6,4,FALSE)))^2) 
  1. 每个function的右侧部分采取“城市#”和检索识别#

  2. NUMBERVALUE使识别城市#是一个数字值而不是文本。

  3. 每一对的第一个VLOOKUP使用列列表(大概是列A)来查找第一个城市的数字(确保列参考对列字母前面的$是绝对的)。

  4. 每对的第二个VLOOKUP使用matrix顶部的行列表来引用第二个城市坐标(确保行参考是绝对的,行号前面是$)。

  5. 使用公式中的“$ A $ 2:$ D $ 6”部分来创build城市参考号和x,y,z列信息的绝对参考。 (在行号和列字母前使用$)

  6. 每个VLOOKUP的第三个元素指的是绝对引用的列号(参见步骤5)。 在这种情况下,x = 2,y = 3和z = 4。

  7. 每个VLOOKUP语句中的“错误”可能不是必要的,但我喜欢用它来防止错误。 它确保了VLOOKUP公式中的“完全匹配”。

只是做你的功课:

如果您的工作表如下所示:
在这里输入图像说明

那么只需使用arrayformula即可

 {=SUM((INDEX($B$2:$D$7,MATCH($A11,$A$2:$A$7,0),)-INDEX($B$2:$D$7,MATCH(B$10,$A$2:$A$7,0),))^2)^0.5} 

并填写/右);)

编辑

 =SUMPRODUCT((INDEX($B$2:$D$7,MATCH($A11,$A$2:$A$7,0),)-INDEX($B$2:$D$7,MATCH(B$10,$A$2:$A$7,0),))^2)^0.5 

也将工作(非数组公式)