创建硬编码域以使用别名而不是 Excel 中的代码自动填充列

创建硬编码域以使用别名而不是 Excel 中的代码自动填充列

我使用从 ESRI ArcGIS Online 导出的图层数据库。在 ArcGIS 上,属性表有许多带有代码的列(或字段)。每个代码都对应一个基于每列属性的特定别名。这是通过硬编码域进行管理的,硬编码域会自动将代码号转换为别名。不幸的是,ArcGIS Online 无法将数据导出到 Excel 并保留别名,因此返回的是一个充满代码的数据库,如果事先不知道别名,就无法解释这些代码。

我从 ArcGIS Online 导出的数据至少有一列包含每个条目的标识号或代码。我使用此“主键”在另一个 Excel 文件中重新填充数据库,仅使用 VLOOKUP 函数从 ArcGIS 导出的源数据库中获取我需要的信息,还可以通过每次需要时覆盖源数据库来自动更新数据。

假设我有一列包含“批准状态”信息的列,根据其 ArcGIS 域编码,该列有 3 个可能的值。

据我所知,我使用两种方式手动或半自动用别名填充列:

  1. 最简单但最耗时的方法是手动为Find and Replace每个代码赋予相应的别名,例如:

1用。。。来代替"Accepted";

2用。。。来代替"Rejected";

3用。。。来代替"Resubmit";

  1. 半自动化方法是用语句实现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

相关内容