IF公式来显示一个单元格范围
如果我有四张工作表的Excel工作簿,其中:
工作表1将被用户使用
表2-4将隐藏原始数据。
我已经使用数据validation来创build下拉菜单,以便能够select可search的条件,我如何根据它们的select显示原始数据的一系列单元格?
例如。 如果用户select1,它将显示来自单元格A1-C35,表格3的所有数据。如果他们select2,则将显示来自单元格A14-C46,表格3的所有数据。等等。
完全同意@JoeMalpass,这个问题要求在公共区域至less显示三组不同的数据集合,如果这些数据集合不相似(相同的字段和数据types) ,以正确的格式显示它们是一个问题,即使使用数据透视表将不可能没有用户干预指向正确的领域。 不用说使用VBA会更简单和有效。
现在回到配方解决scheme(并意识到格式问题) ,该解决scheme包括:
- 在工作表级别(范围)中为每组数据添加定义的名称。
在将显示数据的工作表中:
- 添加一个定义的名字列表(图1)
- 添加DataValidation和一些公式以及有关数据集大小的相关信息(图2)
- 显示数据组的范围(图3)
定义名称的使用允许在同一工作表中处理多组数据
数据集
对于这个testing,我在不同的工作表中使用了4个数据集。 在工作表级别添加每个数据集的定义名称,为简单起见,除非同一工作表中有多个数据集(即“Sheet2”包含两个数据集 ),否则我总是使用公用名“DATA” 。
定义名称列表
用于DataValidation并显示范围的大小 图。 1
使用下列公式的字段
名称 – 构buildDataValidation中使用的Defined Name和公式以显示数据
=CONCATENATE("'",$C3,"'!",$D3)
工作表和范围 :input分配给每个数据集的工作表和定义的名称
行 – 显示定义名称的行数
=IFERROR(ROWS(INDIRECT($B3)),"!Err")
列 – 显示已定义名称的列数
=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
selectData :Add DataValidation指向B3:B6
行 – 选定数据集的行数
=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
用于显示所选数据的范围(也可以作为数组公式input)该范围应至less具有按照定义名称列表(即35行和4列)的最大行数和列数。
=IFERROR(INDEX(INDIRECT($J$2),-$J$5+ROW(),-$J$6+COLUMN()),"")
图。 3