不确定标题是否足以概括我的问题。基本上,我试图通过使用公式来简化我的数据输入。我的数据设置方式是,我有三个选项卡(工作表 1、工作表 2 和工作表 3)。工作表 1 填写了基本信息(年龄、日期、性别等),每行都是一个“主机”,并由列 1 Host_Ind 表示。在另一列中,我将其设置为工作表 3 的 TRUE 或 FALSE。我希望的是,当我单击“TRUE”时,它会自动填充工作表 3。我已经想出了以下代码来做到这一点:
=IFERROR(INDEX(Host!$A$2:$A$500,SMALL(IF(TRUE=Host!$T$2:T500,ROW(Host!$A$2:$A$500),""),ROW()-1)-1,1),"")
这成功地将 Host_Ind 移到了 Sheet 3。我遇到的问题是,在 Sheet 3 上,我必须将 Host_Ind 代码复制多行以指示某种行为。我通过复制 Host_Ind_Code 并将“值”粘贴到下一行来做到这一点。我在下面粘贴了一个屏幕截图示例,说明我希望我的数据是什么样子。
您可以看到,由于我复制并粘贴了 Host_001 的值,因此它完全跳过了 Host_002 并转到 Host_003,尽管所有三个主机都是“TRUE”。不幸的是,当我这样做时,它似乎会中断上面的公式,并且不会用 Host_002 填充下一行。根据我的行为数量,它会跳过以下主机。因此,对于上面的示例,我还有另外两个行为,这意味着它将跳过两个主机,公式将从 Host_004 开始并忽略 Hosts_002 和 Host_003。有没有办法编辑上面的代码,让公式跳过值所在的行并开始下一行?我可以附加一个指向我的数据表示例的链接。
我希望这能清楚地解释我想要做的事情!提前谢谢。
答案1
我能想到的两个选项可能会引起人们的兴趣。
选项1
使用公式预先构建每个主机代码的实例数。这样做的问题在于,由于公式是动态的,如果您以后想添加行,那么与 Sheet3 上的其他数据对齐会很棘手。
我可以建议您使用一个数字来表示要为该主机完成多少行,而不是使用 TRUE/FALSE 作为行为标志吗?
然后,您可以在 Sheet3 的单元格 A2 中使用此公式,并且在为该主机添加新的行为行时无需复制和粘贴主机指示符。
=LET(
b,FILTER(HSTACK(Sheet1!A2:A4,Sheet1!E2:E4),Sheet1!E2:E4>0),
m,REPT(TAKE(b,,1),TAKE(b,,-1)),
s,SUBSTITUTE(m,"H",",H"),
tj,TEXTJOIN(",",TRUE,s),
TEXTSPLIT(tj,,",",TRUE)
)
选项 2
使用数据验证来填充 Sheet3 上的 Host_Ind_Code。这将确保您不会输入不应该存在的主机。
首先,在 Sheet3 上某个看不见的地方输入此公式。这将为您提供 Sheet3 的有效主机代码列表,可用于表格 A 列的数据验证。
=FILTER(Sheet1!A2:A4,Sheet1!E2:E4)
调整此公式中的范围以适合 Sheet1 上的数据。
现在选择 Sheet3 上表格的主机代码列中的任意单元格,然后转到功能区的数据选项卡并使用数据验证按钮:
像这样配置对话框:
在“来源”框中,输入上述公式所在的单元格地址(在我的示例中,它是在单元格 F1 中)。单元格地址后面的井号表示“此单元格中由公式创建的所有单元格”。因此,$F$1# 返回 F1:F2 中的主机代码列表:
单击“确定”后,您会注意到 Sheet3 上的主机代码列中有一个下拉按钮。您可以从中为当前行选择一个有效的主机代码。
当创建新行时,此下拉菜单将在主机代码列中可用,只要您按 Tab 键到达当前行的末尾,然后按 Tab 键创建新行: