我有一个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")
如果可能,我宁愿不使用vba。但我愿意接受这个建议。
答案 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$200
和F$1:F$200
,以便公式不需要永久计算。
这将从E列中检索最新日期,其中D列的值与F匹配。
例如,它会在G1中放置08/03/1256
(假设有效日期),因为F3与D1匹配并将放入G3,08/23/1325
(假设有效日期),因为F2和F4都匹配D3 ,但F2是更晚的日期。