-1

我希望能够Dept#在比方说单元格 D2 中输入任何内容,并且在单元格 A11、A12、A13 等中已经有一个公式,它将Subaccount根据Dept#输入自动填充数字。Subaccount每个单元格一个。例子:

http://i49.tinypic.com/5bhib.png

一直在看 COUNTIF 数组似乎仍然无法弄清楚,或者如果不使用 VBA 甚至可能。

请注意,我不使用数据透视表或带有下拉菜单的列表。此外,样本上的单元格 F1 到 H7 将位于另一个选项卡上,并且数据表会更大,列更多。

4

4 回答 4

2

OP 特别声明“我不使用数据透视表”,但总体观点似乎是“要走的路”:

SO15845224 示例

于 2013-04-06T01:24:58.690 回答
1

这是可能的,我认为您最好使用Index(),Match()和. 作为一团糟,这是您将在列中使用的内容:Small()Row()AA11

{=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))}

注意:我忘了提到上述需要作为数组公式输入。

结果: 输出

说明:请记住,下面解释的步骤是虚拟完成的。

  1. 第一步是只保留感兴趣的部门,并将其他部门设置为比列表中任何其他部门更大的任何其他部门。我用过Max() + 1. 不能在单元格中使用以下内容。

    IF($F$2:$F$9 = $D$2, $F$2:$F$9, MAX($F$2:$F$9) + 1)
    
  2. 更改Dep#的列表,以便使用current_row_number / 100000.

    ... + ROW($F$2:$F$9) / 100000
    
  3. 如果您在第 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)}
    
  4. 使用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)}
    
  5. 现在您已经拥有了所有相关部门使用该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))}
    
于 2013-04-06T00:26:41.667 回答
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),"")

我认为这证明可以满足您的要求,但我承认可能需要进行一些调整。

于 2013-04-06T00:25:20.167 回答
0

我的另一个答案似乎适用于@glh 使用的样本数据,所以希望两者都是可行的!但是你(在我看来是明智的)对建议持开放态度,我想说比这两个答案中复杂的公式更好的是建立一个单独的表格,比如 Row1 每个 Dept# 在一个单独的列中并在每个 Dept# 下方输入(主要是一个“一次性”)该部门的每个可能的子帐户。然后填充A11:A19会容易得多,认为你会有更好的控制,因为这将基于预期的组合而不是实际组合。

但我的偏好可能仍然是数据透视表。

于 2013-04-06T00:38:31.933 回答