我试图使用excel来计算x,y和z坐标两点之间的距离,使用公式距离= SQRT((X1-X2)^ 2 +(Y1-Y2)^ 2 +(Z1-Z2) )^ 2))。该公式适用于单个计算我的问题在于我能够将此公式应用于类似于附加图像的大表。 (对角线应该等于零)
我拥有的表格示例和我想要制作的表格:
是否可以在excel中执行此操作?任何见解将不胜感激。谢谢,德里克
答案 0 :(得分:1)
以下公式应该有效。
=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)
每个函数的右侧部分采用“City#”并检索标识#
NUMBERVALUE使识别城市#为数字值而非文字。
每对中的第一个VLOOKUP使用列列表(可能是Col A)来查找第一个城市的数字(确保列引用是绝对的,而列字母前面的$)。
每对的第二个VLOOKUP使用矩阵顶部的行列表来引用第二个城市坐标(确保行引用是绝对的,行号前面的$)。
使用公式的“$ A $ 2:$ D $ 6”部分创建城市参考编号和x,y,z列信息的绝对参考。 (在行号和列号前面使用$)
每个VLOOKUP的第三个元素是指绝对引用的列号(参见步骤5)。在这种情况下,x = 2,y = 3,z = 4。
每个VLOOKUP语句中的“false”可能不是必需的,但我喜欢用它来防止错误。它确保VLOOKUP公式中的“完全匹配”。
答案 1 :(得分:1)
好的,我要做两件事 - (1)概述解决方案;(2)通过解释将来如何做到这一点来教你钓鱼。
好的,有些人已经表明VLOOKUP是你的朋友,但是在使用它时最好将你的查找图表放在自己的页面上,以便以后可以轻松扩展它,但是如果你想在结果页面上同时显示你有例子这样做。
另外请记住,程序喜欢数字 - 因此,只要你能用可理解的数字替换字符串,就可以加快处理速度。
因此,在我的示例中,我将城市图表放在自己的工作表(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
因此,您要做的第一件事是确保您可以按照预期的方式从查找图表中检索数据。因此,在单独的工作表上,我们创建了一个距离图表,如下所示:
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)
验证它是否有效,将其复制到单元格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)
现在我们需要扩展这个并转向您的公式。我们首先设置我们的两个encapsulating(),然后在我们去的时候添加减法符号来复制/粘贴我们的引用
(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
然后将其复制并粘贴到整行或整列 - 然后复制整行/列并突出显示剩余的单元格并粘贴 - 中提琴快速轻松地扩展代码。
答案 2 :(得分:0)