Vba 宏,用于确定给定地理坐标位于哪个地理区域

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

我有地理上不同的区域,其边界由CSV文件(area1.CSV、area2.CSV、area3.CSV等)中的地理坐标集给出。CSV文件中的地理坐标是以逗号分隔的纬度/经度对。在excel工作表中,我在“工作表1”的A列和B列中有其他纬度/经度坐标集。现在,我需要一个宏来确定每个纬度/经度对的位置,并将结果写入excel中的另一个工作表,例如“工作表2”,每个条目的区域位于第三列,或者将结果写入CSV文件

例如,假设我们有如下定义的矩形区域:

区域1.csv:
纬度,经度
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