如何迭代地将函数应用于Excel中的数据组

所以我对于使用excel是相当新的,可能我错过了已经回答的这样的问题,但是我想要做的是测量一个大的excel工作表中的点之间的距离。

我已经尝试了写一个函数的标准方式,并将其拖动下来,但是当我把它移下来时,函数的改变方式并不是我所需要的,而且我似乎也无法确定如何解决这个问题,所以我认为这是一个macros可能是解决scheme。

数据是8组测量,每组有一个蓝色,红色,黄色,Csome,重叠,绿色,青色和全部对象。 每个对象的XYZ坐标列在前三列,并使用一个简单的距离公式我试图测量每个对象和它在同一组中的所有其他对象之间的距离。 例如。 蓝色到红色,黄色,Csome …等。然后再次为Blue2到Red2,Yellow2,Csome2 …和Blue3到Red3,Yellow3,Csome3 …等等。

但是,当我把下面的公式放在我想要的输出应该是的地方,并试图拖下去,显然我遇到了一些问题。 对于第一个蓝色对整个组,我以= SQRT((A $ 2-A2)^ 2 +(B $ 2-B2)^ 2 +(B $ 2-B2)^ 2)开头,然后向下拖动,第2行与第3,4,5,6,7,8和9行。当我到达包含Blue2的第10行时,问题就出现了。 这不应该与Blue1相比,而是开始一个新的组。 那我怎么能在第10行重新启动这个循环,以便在这个组内比较以蓝色2开头的新组,比如第10行的XYZ到第11,12,13 …的XYZ:

Position X Position Y Position Z Unit Category Collection Surpass Object 16.38 41.20 4436.18 um Surface Position Blue Selection 17.35 40.83 4436.17 um Surface Position Red Selection 15.93 40.62 4435.93 um Surface Position Yellow Selection 16.22 40.80 4436.03 um Surface Position Csome1 17.97 42.23 4435.46 um Surface Position Overlap 15.37 40.87 4436.03 um Surface Position Green Selection 15.44 40.04 4436.39 um Surface Position Cyan Selection 17.97 42.23 4435.46 um Surface Position Full 1 15.57 36.20 4435.75 um Surface Position Blue Selection 2 12.83 35.19 4435.33 um Surface Position Red Selection 2 15.76 37.25 4435.74 um Surface Position Yellow Selection 2 14.94 36.17 4435.65 um Surface Position Csome2 15.99 36.78 4436.34 um Surface Position Overlap 2 14.23 36.26 4435.57 um Surface Position Green Selection 2 13.61 36.96 4436.09 um Surface Position Cyan Selection 2 14.64 36.42 4435.80 um Surface Position Full 2 42.83 36.04 4435.47 um Surface Position Blue Selection 3 42.34 36.56 4435.63 um Surface Position Red Selection 3 42.25 36.87 4435.75 um Surface Position Yellow Selection 3 42.48 36.50 4435.62 um Surface Position Csome3 41.77 36.02 4435.67 um Surface Position Overlap 3 42.64 36.89 4435.73 um Surface Position Green 3 42.05 36.90 4436.21 um Surface Position Cyan Selection 3 42.34 36.53 4435.71 um Surface Position Full 3 33.75 33.13 4436.32 um Surface Position Blue Selection 4 34.99 33.12 4436.38 um Surface Position Red Selection 4 35.40 31.97 4436.38 um Surface Position Yellow Selection 4 34.75 32.58 4436.36 um Surface Position Csome4 39.03 35.24 4436.04 um Surface Position Overlap Selection 4 35.49 32.19 4436.49 um Surface Position Green Selection 4 36.14 32.35 4436.42 um Surface Position Cyan Selection 4 36.16 33.20 4436.30 um Surface Position Full 4 

应用一些VBA循环遍历匹配充满通配符,并重置每个迭代公式的起始行应该是最好的方式去与此。

 Sub Group_Formula() Dim frmla As String, rw As Long, rws As Long, n As Long, cnt As Long frmla = "=SQRT((A$×-A×)^2+(B$×-B×)^2+(B$×-B×)^2)" With ActiveSheet '<-set to worksheet name properly! For cnt = 1 To Application.CountIf(.Columns("G"), "Full*") rw = Application.Max(2, rw) rws = Application.Match("Full*", .Cells(rw, "G").Resize(Rows.Count - rw, 1), 0) .Cells(rw, "H").Resize(rws, 1).Formula = Replace(frmla, Chr(215), rw) rw = rw + rws Next cnt End With End Sub 

结果应该类似于以下内容。

组公式和填充列

你需要用一个函数来处理A$2B$2引用,这个函数将会计算这个行。 你可以使用像INDEXINDIRECTOFFSET这样的引用函数来完成你所需要的。 最后两个是易变的,所以请记住,他们重新计算每次值在您的工作表中的变化。 INDEX更有效率。

目前尚不清楚您的数据是否包含组号,因为行末的数字不一致。 如果他们的数据一致,你可以使用它们。 假设组号在列I ,则此INDEX公式将返回正确的A$2参考:

 INDEX($A$2:$A$33,1+((I2-1)*8)) 

或者使用OFFSETfunction:

 OFFSET($A$2,(I2-1)*8,0) 

否则,(不使用组号)可以使用ROWS函数产生类似的结果:

 INDEX($A$2:$A$33,1+QUOTIENT(ROWS(A$2:A2)-1,8)*8) 

所有公式中的8表示组中的项目数量。

完整的公式是:

 =SQRT((INDEX($A$2:$A$33,1+QUOTIENT(ROWS(A$2:A2)-1,8)*8)-A2)^2+(INDEX($B$2:$B$33,1+QUOTIENT(ROWS(B$2:B2)-1,8)*8)-B2)^2+(INDEX($C$2:$C$33,1+QUOTIENT(ROWS(C$2:C2)-1,8)*8)-C2)^2) 

那么作为一个新的Excel用户,你已经直接跳入arrays公式的奇妙和令人困惑的世界。

首先,你需要准备一些数据。 所有这些1,2,3,4需要在他们自己的专栏中,组1中的所有需要​​一个数字,并且需要一致地命名(“绿色”与“绿色select”)。 我们可以使公式更加复杂,以解释数据中的这些特质,但清理它会使它更容易理解。

现在我们把想要计算单元格I1 (本例中为“蓝色select”)和下面的公式的距离的“超越对象”放到单元格I2中,当我们input它时,肯定会按住ctrl+shift+enter

 =SQRT((INDEX($A$2:$A$33,MATCH(1,($G$2:$G$33=I$1)*($H$2:$H$33=$H2),0))-$A2)^2+(INDEX($B$2:$B$33,MATCH(1,($G$2:$G$33=I$1)*($H$2:$H$33=$H2),0))-$B2)^2) 

这将使我们获得每个坐标的x和y坐标之间的距离。 如果需要,您将需要调整公式以将z坐标添加到计算中。

那么花式的指数匹配公式在干什么呢? 在第一种情况下,它抓取列a中的单元格,它与列标题(单元格J$1 )中的“超越对象”和当前行(单元格$H2

现在你只需要填写剩余的标题,然后填写公式就可以得到你的matrix 在这里输入图像描述