我在地理上有不同的区域,其边界由CSV文件中的地理坐标集(area1.csv,area2.csv,area3.csv,.....)给出。 CSV文件中的地理坐标是逗号分隔的纬度/经度对。在Excel工作表中,我在'工作表1和#39;的A和B列中有其他一组纬度/经度坐标。现在,我想要一个宏来确定每个纬度/经度对的位置,并将结果写入excel中的另一个工作表,例如“工作表2'”,第三列中每个条目的区域或写入结果为CSV文件。
例如,假设我们定义如下矩形区域:
Area1.csv:
纬度,经度
0,0
2,0
0,2
2,2
0,0
Area2.csv:
纬度,经度
2,0
4,0
4,2
2,2
2,0
Area3.csv:
纬度,经度
0,2
2,2
2,4
0,4
0,2
Area4.csv:
纬度,经度
2,2
4,2
4,4
2,4
2,2
我们想要找到我们在excel'表1'中所拥有的以下坐标对。在列' A'和' B':
纬度经度
1 1
3 1
1 3
3 3
确实,第一个点或坐标(1,1)在Area1中,第二个(3,1)在Area2中,第三个(1,3)在Area3中,第四个在Area4中。因此,宏应该复制'表1和#39;中的坐标对。到'表2'通过在第三栏附加相应的区域,即“C'”。在这种情况下,'表2'应该如下所示:
纬度经度区 1 1区1 3 1区2 1 3区3 3 3 Area4
我之前从未在VBA中编程过。我真的不知道该怎么做。请帮我。感谢。
答案 0 :(得分:0)
首先将此宏添加到您的Excel文档作为新模块。按ALT-F11打开VB编辑器。按ALT-I-M插入新模块。
将以下代码复制到模块中。
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
当您准备好开始时,按F8一步一步地执行宏。当您准备好让它翻录时,按ALT-F4关闭编辑器。按ALT-F8并选择“getarea”以运行宏。
由于所有屏幕更新,此宏将运行相对较慢。您可以添加Application.ScreenUpdating = False
来停用屏幕更新,请务必稍后使用Application.ScreenUpdating = True
重新启用它。还有其他方法可以加快处理时间,提供进度指标以及其他花哨的功能。但如果按原样运行它就没有坏处。