我使用从 ESRI ArcGIS Online 导出的图层数据库。在 ArcGIS 上,属性表有许多带有代码的列(或字段)。每个代码都对应一个基于每列属性的特定别名。这是通过硬编码域进行管理的,硬编码域会自动将代码号转换为别名。不幸的是,ArcGIS Online 无法将数据导出到 Excel 并保留别名,因此返回的是一个充满代码的数据库,如果事先不知道别名,就无法解释这些代码。
我从 ArcGIS Online 导出的数据至少有一列包含每个条目的标识号或代码。我使用此“主键”在另一个 Excel 文件中重新填充数据库,仅使用 VLOOKUP 函数从 ArcGIS 导出的源数据库中获取我需要的信息,还可以通过每次需要时覆盖源数据库来自动更新数据。
假设我有一列包含“批准状态”信息的列,根据其 ArcGIS 域编码,该列有 3 个可能的值。
据我所知,我使用两种方式手动或半自动用别名填充列:
- 最简单但最耗时的方法是手动为
Find and Replace
每个代码赋予相应的别名,例如:
1
用。。。来代替"Accepted"
;
2
用。。。来代替"Rejected"
;
3
用。。。来代替"Resubmit"
;
半自动化方法是用语句实现
VLOOKUP
从源文件(Export.xlsx)中检索数据的公式IFS
,为每个代码指定一个别名value-if-true
,如下所示:=IFS(VLOOKUP($A2,[Export.xlsx]Sheet1!$B:$CV,11,FALSE)=1,"已接受",VLOOKUP($A2,[Export.xlsx]Sheet1!$B:$CV,11,FALSE)=2,"已拒绝",VLOOKUP($A2,[Export.xlsx]Sheet1!$B:$CV,11,FALSE)=3,"重新提交")
我的问题是,当域包含数十个代码时,第二种方法的计算量很大,并且每次源数据库不同时都必须这样做。
我也尝试使用 Coleptica,这是一个在代码列表上声明了功能的 Excel 插件,但官方文档指出这是一个即将推出的功能。
有没有什么方法,如果使用 VBA,可以创建“硬编码”列表,以根据每列属性自动用别名填充数据?
答案1
您可以创建一个 VBA 宏,其中包含 Range.Replace 方法 命令来替换列中的值,并在您收到的任何新的 Excel 文件上运行一次。
例如一些(未经测试的)代码:
Sub replace_codes()
Columns("A").Replace What:="1", Replacement:="Accepted", LookAt=xlWhole, SearchOrder:=xlByColumns
End Sub