显示单元格范围的 IF 公式
Posted
技术标签:
【中文标题】显示单元格范围的 IF 公式【英文标题】:IF formula to display a range of cells 【发布时间】:2015-09-10 23:57:59 【问题描述】:如果我有一个包含四张工作表的 Excel 工作簿,其中:
表格 1 将由用户使用 表格 2-4 将对原始数据隐藏。
我已经使用数据验证创建了一个下拉列表,以便能够选择可搜索的条件,我如何根据选择显示原始数据中的一系列单元格?
例如。如果用户选择 1,它将显示单元格 A1-C35、Sheet 3 中的所有数据。如果他们选择 2,它将显示单元格 A14-C46、Sheet 3 中的所有数据。等等。
【问题讨论】:
虽然并非不可能,但在保持纸张美观的同时做到这一点会有些棘手。您需要在每个单元格中都有一个公式,该公式可能会填充一个值(当返回的范围较小时,这意味着大面积的空值)。或者,您可以将原始数据表上的一些帮助列与用户界面表上的过滤数据透视表结合使用——这将提供更动态的结果集,但需要您的用户了解数据透视表的工作原理。 【参考方案1】:完全同意@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
【讨论】:
这是一个非常彻底的答案,做得很好。请注意,INDIRECT
的使用非常适合小型数据集,它可能会使大型工作表上的事情变得有点迟缓,因为它是一个易失函数,并且需要在工作簿中发生任何变化时重新计算(甚至对没有对间接函数的使用或引用的影响)。不知道这里会有什么影响,因为提问者没有提到他们的工作簿的大小,希望这不会是一个问题。
感谢@JeoMalpass 提醒我“间接”的波动性,老实说,这是我经常忘记的事情,因为我大部分时间都使用手动计算。正如您所提到的,没有数据大小的迹象,但是如果要明确地将其用于非常大的数据,则解决方案应该涉及 VBA。也没有提到使用显示的数据,但似乎它仅用于一种报告或信息,在这种情况下,格式将是一个问题。以上是关于显示单元格范围的 IF 公式的主要内容,如果未能解决你的问题,请参考以下文章
LibreOffice Calc:如何一次突出显示单元格范围的最大值?