完全同意@JoeMalpass,这个问题需要在一个公共区域显示至少三个不同的数据集,如果这些数据集不相似(相同的字段和数据类型)显示它们使用正确的格式是一个问题,即使在没有用户干预以指向正确字段的情况下使用数据透视表也是不可能的。 不用说使用 VBA 会更简单有效。
现在回到公式解决方案(并注意格式问题),此解决方案包括:
- 在工作表级别为每个集合添加定义的名称(范围)
数据。
在将显示数据的工作表中:
- 添加定义名称列表(图 1)
- 添加 DataValidation 和一些公式,其中包含有关数据集大小的相关信息(图 2)
- 显示数据集的范围(图 3)
使用定义的名称允许在同一个工作表中处理多组数据
数据集
对于这个测试,我在不同的工作表中使用了 4 个数据集。
在工作表级别为每个数据集添加定义的名称,为简单起见,我始终使用通用名称 “DATA”,除非同一个工作表中有多个数据集(即“Sheet2”包含两个数据套)*
已定义名称列表
用于数据验证和显示范围的大小
如图。 1
对字段使用以下公式
Name – 构建在 DataValidation 中使用的定义名称和显示数据的公式
=CONCATENATE("'",$C3,"'!",$D3)
工作表和范围:输入分配给每个数据集的工作表和定义名称
Rows – 显示定义名称的行数
=IFERROR(ROWS(INDIRECT($B3)),"!Err")
Columns – 显示定义名称的列数
=IFERROR(COLUMNS(INDIRECT($B3)),"!Err")
地址 – 已定义名称(可选)
=CONCATENATE(
ADDRESS(ROW(INDIRECT($B3)),COLUMN(INDIRECT($B3))),":",
ADDRESS(ROW(INDEX(INDIRECT($B3),$E3,$F3)),COLUMN(INDEX(INDIRECT($B3),$E3,$F3))))
显示数据
如图。 2
对字段使用以下公式
选择数据:在单元格J2中添加指向B3:B6的DataValidation
行数 – 所选数据集的行数
=IFERROR(ROWS(INDIRECT($J$2)),"!Err")
列 – 所选数据集的列数
=IFERROR(COLUMNS(INDIRECT($J$2)),"!Err")
OffsetRow - 用于在公式中显示数据
=-1+ROW($I$11)
OffsetColumn:- 用于公式中显示数据
=-1+COLUMN($I$11)
OffsetRow & OffsetColumn:应该指向用于显示数据的范围的第一个单元格,即I11
用于显示所选数据的范围(也可以作为数组公式输入)
根据定义名称列表,此范围应至少具有最大行数和列数(即 35 行和 4 列)
=IFERROR(INDEX(INDIRECT($J$2),-$J$5+ROW(),-$J$6+COLUMN()),"")
如图。 3