组合或删除易失性函数/输出大于Z的列字母
继续给出这个问题的build议: 返回列号,而不是数字,列“AA”
我有以下公式: =CHAR(SMALL(IF(ISNUMBER(SEARCH($AK$11, INDIRECT($AA$998&"A1:AE9999"))),1*COLUMN(INDIRECT($AA$998&"A1: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个字符。
我的第一个公式是在单元格AG4
。 AA2
是表单名称。 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行中,如示例中所述。