我有一个大型项目主记录和一个用于汇总这些信息的表格。每个工作都有一个“报价编号”,以及一个标志,用于确定是否应在给定的表格中显示该工作(标志为 0%、20%、50%、80%、100%)。主记录包含与工作相关的所有信息,而报告表需要过滤掉具有给定标志的特定工作。
目前,管理员必须手动筛选职位,并将报价编号复制粘贴到正确的表中,然后该表将索引匹配所需的所有数据等等。我们正在尝试使此过程自动化,以便表中始终包含正确的职位,尤其是因为标志每天都在变化。
我尝试过在单元格中使用各种函数,例如 IndexMatch(仅返回第一个值)、if 语句,但我找不到完成此操作的方法。有没有办法在不使用 VBA 的情况下在 Excel 中本地执行此操作,或者这是我最好的选择?我个人更喜欢不使用 VBA 来执行此操作,因为这样使用起来更容易,但如果真的需要它,我已经想出了如何操作。
附注:我不能使用数据透视表,它们不能按照我们需要的方式工作,因此,虽然它们会按照我需要的方式自动过滤工作,但它们有太多缺点,我无法使用它们。
答案1
是的,这可以在不使用 VBA 的情况下在本机完成。但它需要使用数组函数。
如果报价编号不包含任何非数字字符,则以下解决方案将有效。
数组中输入(Ctrl++ )以下公式并将Shift其复制粘贴/填充到表格列的其余部分(不要忘记删除 and ):EnterB3
{
}
{=SMALL(IF($G$2:$G$10=$B$1,$F$2:$F$10,FALSE),ROW()-ROW(B$2))}
请注意,虽然我已经习惯B1
保存标志值,但对于每个摘要表,这可能会以不同的方式进行硬编码。
警告:
如果摘要表包含的行数少于主注册表,那么它们可能不会显示所有匹配的数据(如上面的屏幕截图所示)。
为了解决这个问题,可以在每个摘要表的末尾添加一个公式来检测这种可能性并警告用户增加行数:
在中输入以下公式B8
:
=IF(ISERROR(SUM(B3:B7)),"All OK","Add More Rows")
SMALL()
为了使该解决方法起作用,当找不到更多匹配的引号时函数中发生的错误无法被抑制。