我希望能够Dept#
在比方说单元格 D2 中输入任何内容,并且在单元格 A11、A12、A13 等中已经有一个公式,它将Subaccount
根据Dept#
输入自动填充数字。Subaccount
每个单元格一个。例子:
一直在看 COUNTIF 数组似乎仍然无法弄清楚,或者如果不使用 VBA 甚至可能。
请注意,我不使用数据透视表或带有下拉菜单的列表。此外,样本上的单元格 F1 到 H7 将位于另一个选项卡上,并且数据表会更大,列更多。
我希望能够Dept#
在比方说单元格 D2 中输入任何内容,并且在单元格 A11、A12、A13 等中已经有一个公式,它将Subaccount
根据Dept#
输入自动填充数字。Subaccount
每个单元格一个。例子:
一直在看 COUNTIF 数组似乎仍然无法弄清楚,或者如果不使用 VBA 甚至可能。
请注意,我不使用数据透视表或带有下拉菜单的列表。此外,样本上的单元格 F1 到 H7 将位于另一个选项卡上,并且数据表会更大,列更多。
OP 特别声明“我不使用数据透视表”,但总体观点似乎是“要走的路”:
这是可能的,我认为您最好使用Index()
,Match()
和. 作为一团糟,这是您将在列中使用的内容:Small()
Row()
A
A11
{=INDEX($G$2:$G$9,MATCH(SMALL(IF($F$2:$F$9=$D$2,$F$2:$F$9,MAX($F$2:$F$9)+1)+
ROW($F$2:$F$9)/100000,ROW()-10),$F$2:$F$9+ROW($F$2:$F$9)/100000,0))}
注意:我忘了提到上述需要作为数组公式输入。
结果:
说明:请记住,下面解释的步骤是虚拟完成的。
第一步是只保留感兴趣的部门,并将其他部门设置为比列表中任何其他部门更大的任何其他部门。我用过Max() + 1
. 不能在单元格中使用以下内容。
IF($F$2:$F$9 = $D$2, $F$2:$F$9, MAX($F$2:$F$9) + 1)
更改Dep#的列表,以便使用current_row_number / 100000
.
... + ROW($F$2:$F$9) / 100000
如果您在第 11 行,这将是第一个有效的部门编号(ROW()-10
如果在,将给您 1 A11
),现在列表中有行号,第一个将是第 2 行。该Small()
函数将为您提供最小的 x:
{=SMALL(IF($F$2:$F$9=$D$2,$F$2:$F$9,MAX($F$2:$F$9)+1)+
ROW($F$2:$F$9)/100000,ROW()-10)}
使用Match()
现在将为您提供 x 值的行。
{=MATCH(SMALL(IF($F$2:$F$9=$D$2,$F$2:$F$9,MAX($F$2:$F$9)+1)+
ROW($F$2:$F$9)/100000,ROW()-10),$F$2:$F$9+ROW($F$2:$F$9)/100000,0)}
现在您已经拥有了所有相关部门使用该Index
功能检索相应子帐户的行。
{=INDEX($G$2:$G$9,MATCH(SMALL(IF($F$2:$F$9=$D$2,$F$2:$F$9,MAX($F$2:$F$9)+1)+
ROW($F$2:$F$9)/100000,ROW()-10),$F$2:$F$9+ROW($F$2:$F$9)/100000,0))}
不确定这是否足够通用,但对于提供的示例来说似乎还可以,因此至少可能是您愿意接受的指针:
在A11
输入=VLOOKUP($D$2,F1:$G$8,2,FALSE)
中(根据您的表格位于不同选项卡上的事实进行调整)。这假设每个部门总是至少有一个子帐户,因此比A12
(复制到A19
)的公式要简单一些:
=IFERROR(VLOOKUP($D$2,INDIRECT("F"&MATCH(A11,G:G,0)+1&":$G$8"),2,FALSE),"")
我认为这证明可以满足您的要求,但我承认可能需要进行一些调整。
我的另一个答案似乎适用于@glh 使用的样本数据,所以希望两者都是可行的!但是你(在我看来是明智的)对建议持开放态度,我想说比这两个答案中复杂的公式更好的是建立一个单独的表格,比如 Row1 每个 Dept# 在一个单独的列中并在每个 Dept# 下方输入(主要是一个“一次性”)该部门的每个可能的子帐户。然后填充A11:A19
会容易得多,我认为你会有更好的控制,因为这将基于预期的组合而不是实际组合。
但我的偏好可能仍然是数据透视表。