在VBA的帮助下找到最近的坐标

时间:2015-12-18 16:49:41

标签: excel vba excel-vba

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

使用MIN功能,我可以找到Point1与列表中最近点之间的最近距离。

问题在于我无法找到该点的坐标(或至少一个坐标)。为此,我想我需要使用VBA。

我会使用VBA在一个坐标(例如x)的列中找到我寻找的点(一个距离最近的点)的一个坐标。我已经编写了一个简单的代码,如果我添加if条件但是它不起作用,它应该能给我我想要的东西。我将在代码中使用的if条件是:

如果columnx =(SQRT(Abs((距离)^ 2 - ((columny - pt1y)^ 2)))+ pt1x)那么     pt2x = columnx

pt2x将是Point1的函数名,pt1y-y坐标,Point1的pt1x-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,但结果是一样的。单元格中的值格式正确。

我做错了什么?或者也许你可以提供不同的解决方案?

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

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

2 个答案:

答案 0 :(得分:1)

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

我还在函数找到匹配项时添加了一个提前退出,并且默认返回值(如果找不到任何内容)。

答案 1 :(得分:0)

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

功能K23S(l作为范围,作为范围)作为变体

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"

结束功能