继续就此问题提出建议: Return the column letter rather than number with column "AA" onwards
我有以下公式:
=CHAR(SMALL(IF(ISNUMBER(SEARCH($AK$11, INDIRECT($AA$998&"A1:AE9999"))),1*COLUMN(INDIRECT($AA$998&"A1:AE9999"))),ROWS(A$1:A1))+96)
本质上,它将搜索AA998
中给出的表格和A1:AE9999
中AK11
中指定的单词/短语的范围,并返回列号,然后将列号转换为它的专栏信。
这是必要的,因为我需要在下面的公式中将其用作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
的列字母,因此如果搜索结果位于列AA
中,则这不是输出。破坏所有后续公式。我怎样才能获得实际的专栏信?
问题2: 如何组合或改进这些公式以消除一些挥发性功能或使配方整体更有效?
答案 0 :(得分:1)
在一个公式中完成所有操作:
=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))
但是,无论如何,我建议将其拆分为两个公式,这样我们就不必一遍又一遍地调用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行,如示例中所述。