1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6169|回复: 10

[求助] 第二张表查找第一张表名字和经纬度,并计算2个点的距离,大于350米标绿

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-23 09:02 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
第二张表查找第一张表名字和经纬度,并计算2个点的距离,大于350米标绿,详见附件

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-23 09:04 | 显示全部楼层
附件如下,请高手帮忙看看

主辅.zip

9.2 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2016-1-23 09:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
查找倒是不难,只是计算距离非常人专业,不会,你能给出计算方法吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-23 10:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-1-23 11:28 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-1-23 11:47 | 显示全部楼层
本帖最后由 一指禅62 于 2016-1-23 12:24 编辑

拼凑的,不知对不对?

  1. Sub 测距()
  2.     'C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
  3. '    (MLonA, MLatA)和(MLonB, MLatB)
  4.     Dim MLonA As Double, MLatA As Double    'A点的经纬度
  5.     Dim MLonB As Double, MLatB As Double    'B点的经纬度
  6.     Dim C As Double 'A、B间的距离
  7.     Dim Rng As Range, i%, key$
  8.     Dim myTrue As Boolean
  9.     Const R = 6371004   '地球的平均半径,单位:米
  10.     Const Pi = 3.1415936
  11.     myTrue = True
  12.     With Sheet2.Range("C2:G65536")
  13.         .ClearContents
  14.         .Font.ColorIndex = 0
  15.         .Interior.ColorIndex = xlNone
  16.     End With
  17.     For i = 2 To Sheet2.Range("A65536").End(3).Row
  18.         key = Sheet2.Cells(i, 1)
  19.         Set Rng = Sheet1.Range("A:A").Find(key, lookat:=xlWhole)
  20.         If Not Rng Is Nothing Then
  21.             Sheet2.Cells(i, 3) = Rng.Offset(0, 1)
  22.             MLonA = Rng.Offset(0, 2) 'A点的经度
  23.             MLatA = Rng.Offset(0, 3) 'A点的纬度
  24.         Else
  25.             myTrue = False
  26.         End If
  27.         key = Sheet2.Cells(i, 2)
  28.         Set Rng = Sheet1.Range("A:A").Find(key, lookat:=xlWhole)
  29.         If Not Rng Is Nothing Then
  30.             Sheet2.Cells(i, 4) = Rng.Offset(0, 1)
  31.             MLonB = Rng.Offset(0, 2) 'B点的经度
  32.             MLatB = Rng.Offset(0, 3) 'B点的纬度
  33.         Else
  34.             myTrue = False
  35.         End If
  36.         If myTrue Then
  37.             C = R * WorksheetFunction.Acos(Sin(MLatA) * Sin(MLatB) * Cos(MLonA - MLonB) + Cos(MLatA) * Cos(MLatB)) * Pi / 180
  38.             C = WorksheetFunction.Round(C, 0)
  39.             With Sheet2.Cells(i, 5)
  40.                 .Value = C
  41.                 If C > 350 Then
  42.                     .Interior.ColorIndex = 50
  43.                     .Font.ColorIndex = 2
  44.                 End If
  45.             End With
  46.         End If
  47.     Next
  48. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-1-23 12:26 | 显示全部楼层
本帖最后由 一指禅62 于 2016-1-23 12:35 编辑

主辅.zip (12.69 KB, 下载次数: 24)

TA的精华主题

TA的得分主题

发表于 2016-1-23 12:35 | 显示全部楼层
给你个计算距离的自定义函数:
  1. '//**********  计算2个经纬度之间的距离 **************
  2.        '函数名:  GetDistance
  3.        '返回值:  距离,米,和常数:EARTH_RADIUS 的单位相同
  4.        '参数1对: JingDu1  经度,WeiDu1  纬度
  5.        '参数2对: JingDu2  经度,WeiDu2  纬度
  6.        '使用方法:MsgBox "距离是:" & GetDistance(JingDu1, WeiDu1, JingDu2, WeiDu2) & "米"
  7.        ' 整理:北极狐工作室 QQ:14885553
  8.        '**************
  9. Private Const EARTH_RADIUS = 6371004 '//这里地球半径单位:米

  10. Const EarthRadius = 6378.137
  11. Private Function GetDistance(ByVal JingDu1 As Double, ByVal WeiDu1 As Double, ByVal JingDu2 As Double, ByVal WeiDu2 As Double) As Double
  12.     s = Application.Acos(Sin(WeiDu1 / 180 * Application.WorksheetFunction.Pi()) * Sin(WeiDu2 / 180 * Application.WorksheetFunction.Pi()) + Cos(WeiDu1 / 180 * Application.WorksheetFunction.Pi()) * Cos(WeiDu2 / 180 * Application.WorksheetFunction.Pi()) * Cos(JingDu2 / 180 * Application.WorksheetFunction.Pi() - JingDu1 / 180 * Application.WorksheetFunction.Pi())) * EARTH_RADIUS
  13.     GetDistance = Round(s * 10000) / 10000
  14. End Function
  15. '//****************************************************


  16. Function Rad(d)
  17.     Rad = d * Application.WorksheetFunction.Pi / 180#
  18. End Function
  19. Function Distance(Lon1, Lat1, Lon2, Lat2)
  20.     Dim RadLat1 As Double
  21.     Dim RadLat2 As Double
  22.     Dim a As Double
  23.     Dim b As Double
  24.     Dim s As Double
  25.     RadLat1 = Rad(Lat1)
  26.     RadLat2 = Rad(Lat2)
  27.     a = RadLat1 - RadLat2
  28.     b = Rad(Lon1) - Rad(Lon2)
  29.     s = 2 * Application.WorksheetFunction.Asin(Sqr(Sin(a / 2) ^ 2 + Cos(RadLat1) * Cos(RadLat2) * (Sin(b / 2) ^ 2)))
  30.     s = s * EarthRadius
  31.     Distance = s
  32. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2016-1-23 17:12 | 显示全部楼层
Y2015-h.rar (13.26 KB, 下载次数: 23)

TA的精华主题

TA的得分主题

发表于 2016-1-23 17:25 | 显示全部楼层
本帖最后由 hhjjpp 于 2016-1-23 19:43 编辑

把地球看成近似球体,两点距离即为通过两点及球心的剖面之圆弧长,该圆半径为球径
从两点作赤道平面的垂线,其两点之弦及其在赤道平面的投影,构成一个四面椎的底面(直角梯形),四条棱均为地球半径(或其一段)
棱锥其中三个面为:两点各自的经度剖面、地球赤道平面
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-4-9 10:55 , Processed in 0.034613 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表