我正在处理两个Excel文件。第一个有一个数组公式。
=IF(ISERR(INDEX('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E,SMALL(IF('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E=$B$1,ROW('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E)),ROW(1:1)),5)),"",INDEX('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E,SMALL(IF('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E=$B$1,ROW('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E)),ROW(1:1)),5))
此数组公式正在调用另一个Excel文件,并比较每行中的数字以查看它们是否匹配。因此,基本上,如果Excel文件1中的B1
与Excel文件2中的B2
相匹配,则输出E2
(E2
是时间戳日期)。转到下一行并比较数字,依此类推,直到B1
不不匹配B2
。
我希望E2
是仅显示日期的时间戳,即2/21/2012
而不是2/21/2012 11:00 AM EST
,所以我写了这个公式来去除时间戳记关闭。
=(LEFT(E2,FIND("/",E2,FIND("/",E2)+1)-1)&"/"&IF(LEN(RIGHT(E2,LEN(E2)-SEARCH(" ",E2)))=12,LEFT(RIGHT(E2,17),4),LEFT(RIGHT(E2,16),4)))/1
当我更改数组以输出现在为F2
的日期时,输出将显示为空白。我假设数组无法输出使用其他公式的行的值?
答案 0 :(得分:0)
假设这是您的月份,并且对您有用。
LEFT(E2,FIND("/",E2,FIND("/",E2)+1)-1))
假设这是你的一年
IF(LEN(RIGHT(E2,LEN(E2)-SEARCH(" ",E2)))=12,LEFT(RIGHT(E2,17),4),LEFT(RIGHT(E2,16),4))
假设您正在寻找
/1
将每个细分都放入DATE函数中
DATE(year, month, day)
=DATE(IF(LEN(RIGHT(E2,LEN(E2)-SEARCH(" ",E2)))=12,LEFT(RIGHT(E2,17),4),LEFT(RIGHT(E2,16),4)),LEFT(E2,FIND("/",E2,FIND("/",E2)+1)-1)),1)
如果上述假设正确,那将为您提供每月的第一天。
答案 1 :(得分:0)
尽管此数组公式似乎可行,但我建议您进行一些调整以提高其性能:
=IF( ISERR(
INDEX( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E,
SMALL( IF('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E=$B$1,
ROW( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E) ),
ROW(1:1) ), 5 ) ), "",
INDEX('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E,
SMALL( IF('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E = $B$1,
ROW('[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E)),
ROW(1:1)), 5 ) )
为了简化对数组公式的检查,我们通过将'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'
替换为'[Wb]Sh'
来对其进行总结:
=IF( ISERR(
INDEX( '[Wb]Sh'!$A:$E,
SMALL( IF( '[Wb]Sh'!$A:$E = $B$1, ROW( '[Wb]Sh'!$A:$E) ), ROW(1:1) ), 5 ) ), "",
INDEX( '[Wb]Sh'!$A:$E,
SMALL( IF( '[Wb]Sh'!$A:$E = $B$1, ROW( '[Wb]Sh'!$A:$E) ), ROW(1:1) ), 5 ) )
可以使用WorksheetFunction.IfError Method (Excel)如下改进此数组公式:
=IFERROR( INDEX( '[Wb]Sh'!$A:$E,
SMALL( IF( '[Wb]Sh'!$A:$E = $B$1, ROW( '[Wb]Sh'!$A:$E) ), ROW(1:1) ), 5 ) ), "")
通过将数组减少到严格必要的大小可以实现进一步的改进:
=IFERROR( INDEX( '[Wb]Sh'!$E:$E,
SMALL( IF( '[Wb]Sh'!$A:$A = $B$1, ROW( '[Wb]Sh'!$A:$A) ), ROW(1:1) ) ), "")
解决方案:
此标准公式使用WorksheetFunction.Aggregate Method (Excel)从数组中返回匹配结果。
1.a假设位于'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A
处的列表之间没有空白单元格:
= IFERROR( INDEX( TargetRange,
AGGREGATE( 15, 6, ROW(MatchCellColumn) / ( SourceRange = MatchCell ),
ROWS($1:1) ) ), "" )
1.b如果位于'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A
的列表之间有空白单元格,请使用以下公式:
= IFERROR( INDEX( TargetRange,
AGGREGATE( 15, 6, ROW(MatchCellColumn) / ( ( SourceRange <> "" ) *
( SourceRange = MatchCell ) ),
ROWS($1:1) ) ), "" )
位置:
TargetRange
:'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$E:$E
SourceRange
:'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A
MatchCell
:$B$1
MatchCellColumn
:$B:$B
为了仅从TargetRange
返回时间戳记的日期,我们应将以上Index
公式包装在该公式中(此解决方案也可以应用于Array公式) :
2.a要以字符串形式返回日期,请使用以下公式:
= IFERROR( TRIM( LEFT( SUBSTITUTE( INDEX( ), " ",REPT(" ",5) ), 10) ), "" )
2.b要将日期作为日期序列返回,请使用以下公式:
= IFERROR( DATEVALUE( TRIM( LEFT( SUBSTITUTE( INDEX( ), " ",REPT(" ",5) ), 10) ) ), "" )
注意: 如果无法将时间戳中的日期识别为有效的Excel日期,即时间戳格式为,则该公式将返回错误(即““”) mm-dd-yyyy
,系统日期定义为dd-mm-yyyy
。
公式:
使用以下公式从位于'[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$E
的列表中返回时间戳:
E2
中输入以下公式,然后根据需要向下复制: = IFERROR( INDEX( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$E:$E,
AGGREGATE( 15, 6,
ROW($B:$B) / ( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A = $B$1 ),
ROWS($1:1) ) ), "" )
F2
中输入以下公式,然后根据需要向下复制: = IFERROR( TRIM( LEFT( SUBSTITUTE(
INDEX( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$E:$E,
AGGREGATE( 15, 6,
ROW($B:$B) / ( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A = $B$1 ),
ROWS($1:1) ) ),
" ",REPT(" ",5) ), 10) ), "" )
E2
中输入此公式,然后根据需要向下复制 = IFERROR( DATEVALUE( TRIM( LEFT( SUBSTITUTE(
INDEX( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$E:$E,
AGGREGATE( 15, 6,
ROW($B:$B) / ( '[Talent Biography Report Sample 8-8-18.xlsx]Leadership Training Info'!$A:$A = $B$1 ),
ROWS($1:1) ) ),
" ",REPT(" ",5) ), 10) ) ), "" )