组合或删除易失性函数/输出大于Z的列字母

继续给出这个问题的build议: 返回列号,而不是数字,列“AA”

我有以下公式: =CHAR(SMALL(IF(ISNUMBER(SEARCH($AK$11, INDIRECT($AA$998&"A1:AE9999"))),1*COLUMN(INDIRECT($AA$998&"A‌​1:AE9999"))),ROWS(A$‌​1:A1))+96)

从本质上讲,它将searchAA998给出的AA998和在A1:AE9999中指定的单词/短语的范围A1:AE9999 ,并返回列号,然后将列号转换为列字母。

这是必要的,因为我需要在下面的公式中使用它作为INDIRECT一部分:

=IFERROR(IF(OR(ISNUMBER(VALUE(RIGHT(INDIRECT($AA$2 & $AG$4 & B4),2)))=FALSE,LEN(SUBSTITUTE(INDIRECT($AA$2& $AG$4 & B4)," ",""))>3),"0",RIGHT(INDIRECT($AA$2& $AG$4 & B4),2)),0)

此公式将检查IF目标单元格的右侧2个字符不是数字, OR单元格的内容大于3个字符。 如果其中任何一个为true则只输出0.如果为false输出正确的2个字符。

我的第一个公式是在单元格AG4AA2是表单名称。 B4是一个行号

使用示例:

INDIRECT引用的工作表名称包含数据列。 可以说5列,第一行包含标题; 蓝色,红色,黄色,绿色,橙色。 标题下面是数据。 数据是不一致的,可能大部分是垃圾,所以我只想提取特定单元格中的特定数据(我的第二个公式中的标准)此外,列可以按不同的顺序,例如红色,橙色,黄色,蓝色,绿色。

现在,让我们说AK11包含Yellow 。 我的第一个公式将查找包含Yellow作为标题的列,并返回该字母,我的第二个公式现在采取此字母(与表名和行号一起),并执行其检查。 如果检查结果正确,则输出目标单元的右边2个数字。

问题1:第一个公式不会返回大于Z的列字母,因此如果search结果在列AA则不会是输出。 破坏所有后续的公式。 我如何获得实际的列信?

问题2:如何结合或改进这些公式来消除一些易变的function或使公式更有效率?

要用一个公式来做到这一点:

 =IF(OR(NOT(ISNUMBER(--RIGHT(INDEX(INDIRECT($AA$998&"A1:E999"),B4,MATCH("*"&AK11&"*",INDIRECT($AA$998&"A1:E1"),0)),2))),LEN(SUBSTITUTE(INDEX(INDIRECT($AA$998&"A1:E999"),B4,MATCH("*"&AK11&"*",INDIRECT($AA$998&"A1:E1"),0))," ",""))>3),0,--RIGHT(INDEX(INDIRECT($AA$998&"A1:E999"),B4,MATCH("*"&AK11&"*",INDIRECT($AA$998&"A1:E1"),0)),2)) 

不过,我build议把它分成两个公式,所以我们不必一直呼叫Index(Indrect(...一遍又一遍,所以在你的第一个公式单元格(提到AG4):

 =INDEX(INDIRECT($AA$998&"A1:E999"),B4,MATCH("*"&AK11&"*",INDIRECT($AA$998&"A1:E1"),0)) 

然后在第二个公式单元格中:

 =IF(OR(NOT(ISNUMBER(--RIGHT(AG4,2))),LEN(SUBSTITUTE(AG4," ",""))>3),0,--RIGHT(AG4,2)) 

请注意,这些公式假定标题在数据表的第1行中,如示例中所述。