夜雨聆风学习资料网

ARTICLE · 1027951

经纬度实战案例①:不用手动算!Excel 批量根据经纬度,自动匹配最近站点

经纬度实战案例①:不用手动算!Excel 批量根据经纬度,自动匹配最近站点
一、问题:
同一份 Excel 文件包含两个 Sheet 数据表,需要批量为每一个现网站点,匹配距离最近的规划站点信息。
二、解决方案(宏代码):
1、【插入】→【形状】,画一个圆角矩形当按钮
2、右键形状 →【指定宏】,新建宏,复制代码,运行;
复制以下代码:

Option Explicit

Sub DistanceMain()

Dim i, j, n, NowRowC, PlanRowC As Long

Dim NowArr, Arr1, PlanArr

Application.ScreenUpdating = False

NowRowC = Sheet1.[c65536].End(xlUp).Row

PlanRowC = Sheet2.[c65536].End(xlUp).Row

Sheet1.Range("D2:G" & NowRowC).ClearContents

NowArr = Sheet1.Range("A2:G" & NowRowC)

PlanArr = Sheet2.Range("A2:C" & PlanRowC)

ReDim Arr1(1 To UBound(PlanArr), 1 To 4)

For i = 1 To UBound(NowArr)

    n = 0

    For j = 1 To UBound(PlanArr)

            n = n + 1

            Arr1(n, 1) = Distance(NowArr(i, 2), NowArr(i, 3), PlanArr(j, 2), PlanArr(j, 3))

            Arr1(n, 2) = PlanArr(j, 1)

            Arr1(n, 3) = PlanArr(j, 2)

            Arr1(n, 4) = PlanArr(j, 3)

    Next

    Sheet1.Cells(i + 1, 5) = Application.Min(Application.Index(Arr1, 0, 1))

    Sheet1.Cells(i + 1, 4) = Arr1(Application.Match(Application.Min(Application.Index(Arr1, 0, 1)), Application.Index(Arr1, 0, 1), 0), 2)

    Sheet1.Cells(i + 1, 6) = Arr1(Application.Match(Application.Min(Application.Index(Arr1, 0, 1)), Application.Index(Arr1, 0, 1), 0), 3)

    Sheet1.Cells(i + 1, 7) = Arr1(Application.Match(Application.Min(Application.Index(Arr1, 0, 1)), Application.Index(Arr1, 0, 1), 0), 4)

Next

MsgBox "妈妈再也不用担心基站偏移了……(距离计算完成)"

Application.ScreenUpdating = True

End Sub

Function Distance(x1, y1, x2, y2)

    Distance = 6378137 * 2 * Application.Asin(Sqr(Application.SumSq(Sin((Application.Radians(y1) - Application.Radians(y2)) / 2)) + Cos(Application.Radians(y1)) * Cos(Application.Radians(y2)) * Application.SumSq(Sin((Application.Radians(x1) - Application.Radians(x2)) / 2))))

End Function

重新右键点击按扭,指定宏,选择刚建的宏;

3、左键点击“测试”
4、结果即生成了;

相关学习资料

返回首页浏览学习资料