Vba 宏,用于确定给定地理坐标位于哪个地理区域
我有地理上不同的区域,其边界由CSV文件(area1.CSV、area2.CSV、area3.CSV等)中的地理坐标集给出。CSV文件中的地理坐标是以逗号分隔的纬度/经度对。在excel工作表中,我在“工作表1”的A列和B列中有其他纬度/经度坐标集。现在,我需要一个宏来确定每个纬度/经度对的位置,并将结果写入excel中的另一个工作表,例如“工作表2”,每个条目的区域位于第三列,或者将结果写入CSV文件 例如,假设我们有如下定义的矩形区域: 区域1.csv:Vba 宏,用于确定给定地理坐标位于哪个地理区域,vba,excel,csv,Vba,Excel,Csv,我有地理上不同的区域,其边界由CSV文件(area1.CSV、area2.CSV、area3.CSV等)中的地理坐标集给出。CSV文件中的地理坐标是以逗号分隔的纬度/经度对。在excel工作表中,我在“工作表1”的A列和B列中有其他纬度/经度坐标集。现在,我需要一个宏来确定每个纬度/经度对的位置,并将结果写入excel中的另一个工作表,例如“工作表2”,每个条目的区域位于第三列,或者将结果写入CSV文件 例如,假设我们有如下定义的矩形区域: 区域1.csv: 纬度,经度 0,0 2,0 0,2
纬度,经度
0,0
2,0
0,2
2,2
0,0 区域2.csv:
纬度,经度
2,0
4,0
4,2
2,2
2,0 区域3.csv:
纬度,经度
0,2
2,2
2,4
0,4
0,2 区域4.csv:
纬度,经度
2,2
4,2
4,4
2,4
2,2 假设我们要定位excel“表1”中“A”和“B”列中的以下坐标对:
经纬度
11
31
13
3 3 的确,第一个点或坐标(1,1)在区域1,第二个(3,1)在区域2,第三个(1,3)在区域3,第四个在区域4。因此,宏应通过在第三列(即“C”)中添加相应区域,将“表1”中的坐标对复制到“表2”。在这种情况下,“表2”应如下所示: 经纬度区 1区域1
3 1区域2
1 3区域3
3区域4
我以前从未用VBA编程。我真的不知道怎么做。请帮帮我。谢谢。首先将此宏作为新模块添加到excel文档中。按ALT-F11打开VB编辑器。按ALT-I-M插入新模块 将下面的代码复制到模块中。
Sub-getarea()
尺寸坐标X、坐标Y、坐标、区域位置作为字符串
记录在案的第二行到第五行,非常感谢。如果我理解正确,代码假定区域(边界)的定义保存在“Shee2”、“Sheet3”、“Sheet4”和“Sheet5”中。有了这个,我用我在第一篇文章中提供的例子来运行它。不幸的是,它无法正确返回与每对点关联的区域。它确实运行,但不输出区域。它显示的所有内容都是“待定”。此外,我计划在大约2000个地区使用该计划。这意味着我必须在同一个excel文件中有2001个工作表。看来这样做没有用。还有其他方法吗?我的直觉告诉我,算法应该如下所示:LOOP1点[START WITH Point1;LOOP2 CSVFiles[START Area1.csv;]IF(Point1在Area1中,GOTO LOOP1);ElSE(GOTO LOOP2);所有点?IF(YES),退出和返回区域;ElSE GOTO LOOP1;]为了编写代码,我创建了一个工作excel文件。我想你会发现跟着一份工作副本走要容易得多。您是否有dropbox帐户或其他方式来接收上载的示例文件?很遗憾,此论坛不提供附件。我没有dropbox帐户,但我有gmail帐户:zafidess@gmail.com谢谢。
Sub getarea()
Dim coordx, coordy, coords, area_location As String
For record_ROW = 2 To 5 '<======== set sheet row limits here
Sheets("Sheet1").Select
'read value to be matched
coordx = Trim(Range("A" & record_ROW))
coordy = Trim(Range("B" & record_ROW))
coords = coordx & "," & coordy
area_location = "undetermined"
'search for answer in Sheet2
Sheets("Sheet2").Select
For source_ROW = 2 To 6 '<======== set sheet row limits here
source_coords = Trim(Range("A" & source_ROW))
If coords = source_coords Then area_location = "Area1"
Next source_ROW
'search for answer in Sheet3
Sheets("Sheet3").Select
For source_ROW = 2 To 6 '<======== set sheet row limits here
source_coords = Trim(Range("A" & source_ROW))
If coords = source_coords Then area_location = "Area2"
Next source_ROW
'search for answer in Sheet4
Sheets("Sheet4").Select
For source_ROW = 2 To 6 '<======== set sheet row limits here
source_coords = Trim(Range("A" & source_ROW))
If coords = source_coords Then area_location = "Area3"
Next source_ROW
'search for answer in Sheet5
Sheets("Sheet5").Select
For source_ROW = 2 To 6 '<======== set sheet row limits here
source_coords = Trim(Range("A" & source_ROW))
If coords = source_coords Then area_location = "Area4"
Next source_ROW
'write the answer
Range("'Sheet1'!C" & record_ROW) = area_location
Next record_ROW
Sheets("Sheet1").Select
End Sub