不能在数组公式中实现INDIRECT()

我有一个名为Finder的工作表,我创build了一个工具来search其他工作表(名为#1,#2等)。 我遇到的问题是我不能在一些情况下使用INDIRECT函数,如下所述:

{ = IF(Finder!$B$4 = 1, INDEX(INDIRECT("'#" & (ROW() - 5) & IF(MOD(COLUMN(), 3) = 0, "'!$A$2:$A$100", "'!$B$2:$B$100")), SMALL(IF(ISERROR(SEARCH(Finder!$F$4, '#1'!$B$2:$B$100)), "", ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), INT(COLUMN() / 3)), 1), IF(Finder!$B$4 = 2, INDEX(INDIRECT("'#" & (ROW() - 5) & "'!" & IF(MOD(COLUMN(), 3) = 0, "$A$2:$A$100", "$B$2:$B$100")), SMALL(IF(Finder!$F$4 = '#1'!$B$2:$B$100, ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1, ""), INT(COLUMN() / 3)), 1),... } 

概念forms:

  { = IF(Finder!$B$4 = 1, INDEX(using INDIRECT to address a range in another sheet successfully, SMALL(IF(ISERROR(SEARCH(cannot use INDIRECT here!)), "", Desired value), Desired item), 1), IF(Finder!$B$4 = 2, INDEX(using INDIRECT to address a range in another sheet successfully, SMALL(IF(cannot use INDIRECT here!, Desired value, ""), Desired item), 1),... } 

我需要在下面的其他表格中解决一个范围:

 SMALL(IF(ISERROR(SEARCH(Finder!$F$4, '#1'!$B$2:$B$100)),... SMALL(IF(Finder!$F$4 = '#1'!$B$2:$B$100,... 

没关系,但是我不能使用INDIRECT来使公式dynamic化:

 SMALL(IF(ISERROR(SEARCH(Finder!$F$4, INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))),... SMALL(IF(Finder!$F$4 = INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"),... 

提前致谢


更新:

查找表

Finder工具包含许多单元格。 图片显示了为什么我需要使用ROW()函数获取表单名称。

更新2:

#1表

Finder工作表中的combobox有四个项目,使用$ B $ 4单元格:

    1-近似search
    2-精确search
    3-完整索引
    4-特定类别

以下是公式的完整代码:

 = IF(ISERROR(IF(Finder!$B$4 = 1, INDEX(INDIRECT("'#" & (ROW() - 5) & IF(MOD(COLUMN(), 3) = 0, "'!$A$2:$A$100", "'!$B$2:$B$100")), SMALL(IF(ISERROR(SEARCH(Finder!$F$4, '#1'!$B$2:$B$100)), "", ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), INT(COLUMN() / 3)), 1), IF(Finder!$B$4 = 2, INDEX(INDIRECT("'#" & (ROW() - 5) & "'!" & IF(MOD(COLUMN(), 3) = 0, "$A$2:$A$100", "$B$2:$B$100")), SMALL(IF(Finder!$F$4 = '#1'!$B$2:$B$100, ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1, ""), INT(COLUMN() / 3)), 1), IF(Finder!$B$4 = 3, IF(MOD(COLUMN(), 3) = 0, 20 * (ROW() - 6) + COLUMN() / 3, INDIRECT(ADDRESS(INT(COLUMN() / 3) + 1, 2, 1, , "#" & (ROW() - 5)))), INDEX(INDIRECT("'#" & (ROW() - 5) & "'!" & IF(MOD(COLUMN(), 3) = 0, "$A$2:$A$100", "$B$2:$B$100")), SMALL(IF(Finder!$F$4 = '#1'!$I$2:$I$100, ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1, IF(ISERROR(SEARCH(Finder!$F$4 & ",", '#1'!$I$2:$I$100)), IF(ISERROR(SEARCH("," & Finder!$F$4, '#1'!$I$2:$I$100)), IF(ISERROR(SEARCH(", " & Finder!$F$4, '#1'!$I$2:$I$100)), "", ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1)), INT(COLUMN() / 3)), 1))))), " ", IF(Finder!$B$4 = 1, INDEX(INDIRECT("'#" & (ROW() - 5) & IF(MOD(COLUMN(), 3) = 0, "'!$A$2:$A$100", "'!$B$2:$B$100")), SMALL(IF(ISERROR(SEARCH(Finder!$F$4, '#1'!$B$2:$B$100)), "", ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), INT(COLUMN() / 3)), 1), IF(Finder!$B$4 = 2, INDEX(INDIRECT("'#" & (ROW() - 5) & "'!" & IF(MOD(COLUMN(), 3) = 0, "$A$2:$A$100", "$B$2:$B$100")), SMALL(IF(Finder!$F$4 = '#1'!$B$2:$B$100, ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1, ""), INT(COLUMN() / 3)), 1), IF(Finder!$B$4 = 3, IF(MOD(COLUMN(), 3) = 0, 20 * (ROW() - 6) + COLUMN() / 3, INDIRECT(ADDRESS(INT(COLUMN() / 3) + 1, 2, 1, , "#" & (ROW() - 5)))), INDEX(INDIRECT("'#" & (ROW() - 5) & "'!" & IF(MOD(COLUMN(), 3) = 0, "$A$2:$A$100", "$B$2:$B$100")), SMALL(IF(Finder!$F$4 = '#1'!$I$2:$I$100, ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1, IF(ISERROR(SEARCH(Finder!$F$4 & ",", '#1'!$I$2:$I$100)), IF(ISERROR(SEARCH("," & Finder!$F$4, '#1'!$I$2:$I$100)), IF(ISERROR(SEARCH(", " & Finder!$F$4, '#1'!$I$2:$I$100)), "", ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1), ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100")) - MIN(ROW(INDIRECT("'#" & (ROW() - 5) & "'!$B$2:$B$100"))) + 1)), INT(COLUMN() / 3)), 1))))) 

该问题是由使用ROWCOLUMN函数引起的。 即使只有一个值,例如{1}而不是1,这些函数也会返回“数组”。在某些情况下,这不是问题,但在其他情况下(如这里),excel会将{1}转换为1,不工作。

一个可能的解决scheme是将所有的ROWCOLUMN函数封装在MAXSUM等函数中,

ROW() - 5

使用

SUM(ROW()) - 5

但更好的方法(和我推荐的)是使用ROWSCOLUMNS函数(与“S”的结尾),所以如果第一个公式是在Z6使用

ROWS($Z$6:Z6)COLUMNS($Z$6:Z6)

在Z6中,这两个值都会给你1的值,但是当你向下或者向下复制的时候,它们会每次增加1(并且不会和ROWCOLUMN )。 无论如何,这是一个更好的解决scheme,因为它消除了-5s,并且在删除或添加行或列时不太容易出错