在VBA的帮助下find最接近的坐标

我的目标是find最接近某一点的点。 我有一个不同点的坐标列表,我想find最接近不在列表中的某个点(Point1)。

使用MIN函数,我可以findPoint1和距列表最近的点之间的最近距离。

问题是我无法find该点的坐标(或至less一个坐标)。 为此我想我需要使用VBA。

我将使用VBA在一个坐标(例如x)的列中查找我正在查找的点的一个坐标(距离最近的点)。 我写了一个简单的代码,应该给我我想要的,如果我添加如果条件,但它不工作。 我将在代码中使用的if条件是:

如果columnx =(SQRT(Abs((距离)^ 2 – ((columny – pt1y)^ 2)))+ pt1x)则pt2x = columnx

pt2x是函数名,Point1的pt1y-y坐标,pt1x – Point1的x坐标,其他的你应该理解。

我写的代码是:

Function K23S(l As Range, s As Range) As Variant Dim K() As Variant K = Range("l").Value Dim M() As Variant M = Range("s").Value Dim i As Long Dim j As Long For i = LBound(K) To UBound(K) For j = LBound(M) To UBound(M) If K(i) = M(j) Then p = K(i) End If Next j Next i p = K23S End Function 

它比较两列(例如A1:A32和B1:B32),如果同一行中的值匹配(如果它们在同一行开始),则应该给出一个值。 目前它给#VALUE! 错误。 我已经尝试了For Each,但结果是一样的。 单元格中的值格式正确。

我究竟做错了什么? 或者,也许你可以提供不同的解决scheme?

我已经使用这个链接,也许这有助于undestand: http ://excelmacromastery.com/Blog/index.php/the-complete-guide-to-using-arrays-in-excel-vba/

*在互联网上find的Excel公式在某些情况下没有给出正确的答案,所以我想尝试一种不同的方法。

p = K23S应该是K23S = p

Option Explicit添加到模块的顶部,因为它应该识别像这样的编译错误。

此外,你错误地做你的范围分配。

 Function K23S(l As Range, s As Range) As Variant Dim K() As Variant Dim M() As Variant K = l.Value M = s.Value Dim i As Long Dim j As Long For i = LBound(K) To UBound(K) For j = LBound(M) To UBound(M) If K(i) = M(j) Then K23S = K(i) Exit Function End If Next j Next i K23S = "Default Value" End Function 

当它find匹配和一个默认返回值(如果没有find任何东西),我也在你的函数中join了一个提前退出。

我刚刚解决了我的问题。 列nr应该被join到数组中。 正确的代码是:

函数K23S(l范围,s范围)作为变体

 Dim K() As Variant Dim M() As Variant K = l.Value M = s.Value Dim i As Long Dim j As Long For i = LBound(K) To UBound(K) For j = LBound(M) To UBound(M) If K(i, 1) = M(j, 1) Then K23S = K(i, 1) Exit Function End If Next j Next i K23S = "Default Value" 

结束function