在单元格中搜索多个项目并返回一个值

时间:2014-08-27 23:00:11

标签: excel-formula

我正在尝试为excel找到一种方法来搜索引用列中的单元格,并在单元格中用()分隔引用,并仅返回最近一年的发布。我不想通过遍历15列以上的1000多个单元格来手动执行此操作。有没有办法做到这一点?行示例1-7:

X (BFP 2013) (Burns 1982 [1,2,3,4,S,M,H,C]) (Rooney 1984 [5,6,11,S,M,H,C])
X (BFP 2013) (Burns 1982 [1,2,3,4,S,M,H])(Rooney 1984 [5,6,11,S,M,H])
X (BFP 2013) (Lortie et al. 1996) (Burns 1982 [1,2,3,4,S,M,C])(Rooney 1984 [5,6,11,S,M,H])
#N/A
#N/A
X (Burns 1982 [1,2,3,4,S,M,H])(Rooney 1984 [5,6,11,S,M,H])
X (BFP 2013) (Burns 1982 [2,4,M,H])(Rooney 1984 [5,6,M,H])

例如,在这种情况下,我希望公式返回2013年的前三行,N / A适用于第4行和第5行,因为没有数据,并返回1984年第6行和2013年排第七,因为它们是最新的出版物。

我有一份18年(出版物)的清单,我可以在细胞内搜索。不确定嵌套的If函数是否可以在单元格中选择一年(如果发生)并返回最高值:1901,1927,1938,1978,1982,1983,1984,1985,1990,1994,1996,1998 ,2004,2005,2007,2010,2012,2013。

或者我不确定我是否可以使用= IF(ISNUMBER(搜索并让它只识别一串文本中的年份并仅返回最近一年。任何人都有任何想法?我希望这很清楚,这很难描述。 感谢您的时间, 弹匣

3 个答案:

答案 0 :(得分:0)

我不想尝试使用excel公式,因为它实际上没有良好的搜索和替换功能。你无疑可以用宏来做到这一点,但对你的解决方案有效的时间可能是

  1. 将数据列剪切并粘贴到文本编辑器中,该编辑器可以进行grep搜索,如BBEdit或TextWrangler

  2. 运行替换文件,将文本转换为日期字符串。以下或多或少做你想要的 - 搜索字符串:。*?([\ d] {4} | \ r \ n)替换字符串\ 1,这给你这样的行,2013,1982,1984,

  3. 运行替换以添加" = max("在行的开头和")"最后给你一个由行组成的文本文件,例如:= max(2013,1982,1984)

  4. 将其剪切并粘贴回excel

  5. 我发现以这种方式组合excel和BBEDit可以非常有效地清理数据集。如果需要重复相同的过程,则可以将替换集保存为文本工厂。

答案 1 :(得分:0)

假设您的第一个X在A1中,我建议您将18年(每个一年)输入新Row1的ColumnsB:S中。在B2中,向下复制以适应:

=IF(ISERROR(FIND(B$1,$A2)),"",B$1)  
在T2中

并复制到适合:

=MAX(B2:S2)

这将返回0而不是#N / A,但您可以包裹MAX函数以测试0,如果是,则返回#N/A(如果需要)。

但是,我不理解您对" 15列"的引用。如果这是ColumnA中类型数据的十五倍,则可能值得将这些块复制或移动到ColumnA中并扩展公式适用的范围。

答案 2 :(得分:0)

这里的答案没有得到肯定,但我注意到Mags(OP)已经评论说他/她得到了答案/工作公式,我只是想强调它,因为我自己错过了它。聪明地使用ROW() imho。肯定要记住这个。

=MAX(IFERROR(1*MID(C3,ROW(INDIRECT("1:"&LEN(C3))),4),""))