Excel中使用VBA进行度分秒与十进制度的转换

发现Excel的VBA功能真是批量处理的一把利刃,工作中小试牛刀了一把,将Excel中度分秒形式的坐标批量处理成十进制度形式,处理完后用于GIS展点制图。

原Excel数据如下:

VBA代码如下:

 1 Sub Coorder()
 2     Dim Longitude, Latitude As String, arr
 3     Dim num As Integer
 4     Dim LongColIdx As Integer
 5     Dim latColIdx As Integer
 6     LongColIdx = 3
 7     latColIdx = 8
 8     num = Application.CountA(ActiveSheet.Range("A:A"))
 9     For i = 2 To num
10         Longitude = Cells(i, LongColIdx)
11         arr = Split(Longitude, "°")
12         Cells(i, LongColIdx + 1) = arr(0)
13         Longitude = arr(1)
14         arr = Split(Longitude, "'")
15         Cells(i, LongColIdx + 2) = arr(0)
16         Longitude = arr(1)
17         arr = Split(Longitude, """")
18         Cells(i, LongColIdx + 3) = arr(0)
19         Cells(i, LongColIdx + 4) = Cells(i, LongColIdx + 1) + Cells(i, LongColIdx + 2) / 60 + Cells(i, LongColIdx + 3) / 3600
20         
21         Latitude = Cells(i, latColIdx)
22         arr = Split(Latitude, "°")
23         Cells(i, latColIdx + 1) = arr(0)
24         Longitude = arr(1)
25         arr = Split(Longitude, "'")
26         Cells(i, latColIdx + 2) = arr(0)
27         Longitude = arr(1)
28         arr = Split(Longitude, """")
29         Cells(i, latColIdx + 3) = arr(0)
30         Cells(i, latColIdx + 4) = Cells(i, latColIdx + 1) + Cells(i, latColIdx + 2) / 60 + Cells(i, latColIdx + 3) / 3600
31     Next i
32 End Sub

处理完结果如下:

结论:

1、对于Excel大批量数据处理,效率极高。

  ① 开发环境方面,无需搭建特定的开发环境,在Excel里就可以进行编码;

  ② 编码方面,由于直接是寄生于Excel自身,相当于一种内嵌的API,其API接口简单、集成度高、调用方便;

2、上述代码其实可以额外起一个作用,就是对原始度分秒数据的文本格式做质检。

 

附:用VBA得到EXCEL表格中的行数和列数

posted @ 2018-04-11 22:26  百折不回  阅读(909)  评论(0编辑  收藏  举报