|
本帖最后由 一指禅62 于 2016-1-23 12:24 编辑
拼凑的,不知对不对?
- Sub 测距()
- 'C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)
- ' (MLonA, MLatA)和(MLonB, MLatB)
- Dim MLonA As Double, MLatA As Double 'A点的经纬度
- Dim MLonB As Double, MLatB As Double 'B点的经纬度
- Dim C As Double 'A、B间的距离
- Dim Rng As Range, i%, key$
- Dim myTrue As Boolean
- Const R = 6371004 '地球的平均半径,单位:米
- Const Pi = 3.1415936
- myTrue = True
- With Sheet2.Range("C2:G65536")
- .ClearContents
- .Font.ColorIndex = 0
- .Interior.ColorIndex = xlNone
- End With
- For i = 2 To Sheet2.Range("A65536").End(3).Row
- key = Sheet2.Cells(i, 1)
- Set Rng = Sheet1.Range("A:A").Find(key, lookat:=xlWhole)
- If Not Rng Is Nothing Then
- Sheet2.Cells(i, 3) = Rng.Offset(0, 1)
- MLonA = Rng.Offset(0, 2) 'A点的经度
- MLatA = Rng.Offset(0, 3) 'A点的纬度
- Else
- myTrue = False
- End If
- key = Sheet2.Cells(i, 2)
- Set Rng = Sheet1.Range("A:A").Find(key, lookat:=xlWhole)
- If Not Rng Is Nothing Then
- Sheet2.Cells(i, 4) = Rng.Offset(0, 1)
- MLonB = Rng.Offset(0, 2) 'B点的经度
- MLatB = Rng.Offset(0, 3) 'B点的纬度
- Else
- myTrue = False
- End If
- If myTrue Then
- C = R * WorksheetFunction.Acos(Sin(MLatA) * Sin(MLatB) * Cos(MLonA - MLonB) + Cos(MLatA) * Cos(MLatB)) * Pi / 180
- C = WorksheetFunction.Round(C, 0)
- With Sheet2.Cells(i, 5)
- .Value = C
- If C > 350 Then
- .Interior.ColorIndex = 50
- .Font.ColorIndex = 2
- End If
- End With
- End If
- Next
- End Sub
复制代码 |
|