从另一个 Excel 工作簿访问数据的最佳方式

从另一个 Excel 工作簿访问数据的最佳方式

获取对存储在另一个 Excel 工作簿中的数据的只读访问权限的最佳方法是什么?我知道有两种可能性,每种都有其优缺点。

选项 1)直接引用数据

例如:=[test1.xls]Sheet1!$A$1

  • 优点:工作簿打开时更新数据
  • 优点:即使引用的工作簿已关闭,仍可工作
  • 缺点:操作无法由数据驱动
  • 优点:适用于所有电子表格,没有安全限制

选项 2)使用 INDIRECT 和 ADDRESS 引用数据

例如: =INDIRECT(ADDRESS(B7,B6, 1, TRUE, B4))

其中 B7 包含行索引,B6 包含列索引,B4 包含工作簿/工作表名称

  • 优点:数据的位置可以由数据驱动
  • 缺点:当参考书关闭时不起作用
  • 缺点:自动加载参考书的解决方法在默认宏安全级别下不起作用

答案1

如果您不做这么多,或者像您的示例一样需要 1 个单元格值,则选项 1 是一个不错的选择。如果您需要:

  1. 经常做这种事
  2. 根据工作簿中可能发生的其他情况进行动态查询(或接受用户输入)
  3. 获取大量数据,或对获取的数据进行过滤/排序
  4. 在呈现之前处理所获取的数据
  5. ETC。

您可能需要编写一个或多个使用数据对象数据库。您可以在 Excel 中使用 ADO 将数据从 Excel、其他数据库或文本文件提取到电子表格中。我经常使用它。以至于我有一个专用类模块帮我处理细节问题。

答案2

如果您担心该技术是否由数据驱动,是因为您担心当其他工作簿中的数据发生变化时引用会过时,那么您可以使用命名范围来避免该问题。

要创建命名范围:在包含数据的工作簿中,选择包含数据的单元格,单击名称框(单元格行和列出现的位置),然后输入名称。

引用范围:要从另一张工作表引用命名范围:

'[MyData.xls]Sheet1'!MyNamedRange

如果您需要从表中获取特定值,则可以使用各种查找函数(例如 vlookup、hlookup、index)来选择特定值。

例如,如果我在工作簿“Sales.xls”中的“Grocery”工作表上有下表,并且我为整个表定义了一个命名范围“tableSales”,

商品 销量 香蕉 343 葡萄 123 鸡蛋 756

然后我可以使用以下内容在另一个工作簿中查找“鸡蛋”销售情况:

=VLOOKUP("鸡蛋",'[Sales.xls]杂货店'!tableSales,2,false)

(vlookup 的第一个参数是查找值,第二个参数是表格的范围,第三个参数指定要检索的列,如果第四个参数设置为 true,它将尝试找到近似匹配)

相关内容