如果一个单元格等于一个范围内的任何单元格

时间:2014-04-01 20:40:37

标签: excel

我有一个excel文件:

A               B     C            D        |E            F
1| 27/50/4832   let   last,first   6786746  |08/29/1232   1243123
2| 25/30/9852   let   last,first   3453453  |08/23/1325   2453434
3| 05/10/9831   let   last,first   2453434  |08/03/1256   6786746
4| 15/00/9341   let   last,first   2342352  |09/45/1259   2453434

我想说

if a value from column f matches any from column D
then in column G write the date from E. 

这里有一点条件,不是F中的所有东西都是唯一的。如果它不是唯一的,我们会采用最近的日期。如上所述,2453434在F中重复两次。所以G3会说08/23/1325因为它显然发生在差不多100年之后。

我有一些尝试(显然非常简单),它们不起作用,我甚至无法开始做我想做的事情。因此无法解决最近日期更复杂的情况。

=IF(F:F=D1,E1,"")
=IF(MATCH(D1,F:F,0),E1,"")
=IF(VLOOKUP(D1,F:F,1,FALSE)=D1,E:E,"die")

如果可能,我宁愿不使用vb​​a。但我愿意接受这个建议。

2 个答案:

答案 0 :(得分:0)

假设您的实际数据中正确日期,请使用以下内容:

=IFERROR(LARGE(IF(D1=F:F,E:E,""),1),"")

CTRL + SHIFT + ENTER

如果您的上述示例中的日期超出了excel的范围(excel 01/01/1900中的最小日期),则获取最大日期是一个真正的问题(可能我不确定它是否真的是日期,因为09/45/1259 45不能是某一天的日期。

但是,您可以在G1中使用此怪物公式:

=IFERROR(MID(LARGE(IF(D2=$F$1:$F$4,VALUE(RIGHT($E$1:$E$4,4)&LEFT($E$1:$E$4,2)&MID($E$1:$E$4,4,2)),""),1),5,2) & "/" & 
         RIGHT(LARGE(IF(D2=$F$1:$F$4,VALUE(RIGHT($E$1:$E$4,4)&LEFT($E$1:$E$4,2)&MID($E$1:$E$4,4,2)),""),1),2) & "/" &
         LEFT(LARGE(IF(D2=$F$1:$F$4,VALUE(RIGHT($E$1:$E$4,4)&LEFT($E$1:$E$4,2)&MID($E$1:$E$4,4,2)),""),1),4),"")

CTRL + SHIFT + ENTER 进行评估并将其向下拖动。 您还可以使用LARGE(..)的附加列来缩短和加快公式。请注意,我使用$F$1:$F$4代替F:F,因为它使公式更快。<​​/ p>

答案 1 :(得分:0)

我会用这样的东西:

=INDEX(E:E,MATCH(1,(E:E=MAX(IF(F:F=D1,E:E,0)))*(F:F=D1),0))

假设您的日期是正确的。

此外,上面是一个数组公式,这意味着要使其正常工作,您必须按 Ctrl + Shift 并按 Enter 输入公式后。

PS:适当改变范围,即E:E和F:F。如果您有200行,请分别使用E$1:E$200F$1:F$200,以便公式不需要永久计算。

这将从E列中检索最新日期,其中D列的值与F匹配。

例如,它会在G1中放置08/03/1256(假设有效日期),因为F3与D1匹配并将放入G3,08/23/1325(假设有效日期),因为F2和F4都匹配D3 ,但F2是更晚的日期。