前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态数组公式:动态获取某列中首次出现#N/A值之前一行的数据

动态数组公式:动态获取某列中首次出现#N/A值之前一行的数据

作者头像
fanjy
发布2024-05-22 15:18:50
780
发布2024-05-22 15:18:50
举报
文章被收录于专栏:完美Excel完美Excel

标签:动态数组

如下图1所示,在数据中有些为值错误#N/A数据,如果想要获取第一个出现#N/A数据的行上方行的数据(图中红色数据,即图2所示的数据),如何使用公式解决?

图1

图2

如示例图2所示,可以在单元格G2中输入公式:

=LET(data,A2:E18,i,MIN(IFERROR(BYCOL(data,LAMBDA(x,MATCH(TRUE,ISNA(x),0))),""))-1,DROP(TAKE(data,i),i-1))

即可获得想要的数据。

如果想要只获取第5列#N/A值上方的数据,则将公式稍作修改为:

=INDEX(LET(data,A2:E18,i,MIN(IFERROR(BYCOL(data,LAMBDA(x,MATCH(TRUE,ISNA(x),0))),""))-1,DROP(TAKE(data,i),i-1)),,5)

也可以使用公式:

=LET(d,FILTER(E2:E18,NOT(ISNA(E2:E18))),DROP(d,ROWS(d)-1))

如果数据区域中#N/A值的位置发生改变,那么上述公式会自动更新为最新获取的值。

自从Microsoft推出动态数组函数后,很多求解复杂问题的公式都得到的简化,很多看似无法用公式解决的问题也很容易用公式来实现了。

当然,也可以使用VBA来解决:

代码语言:javascript
复制
Sub CopyValues()
 Dim rng As Range
 Dim i As Long
 
 With Worksheets("Sheet1")
   Set rng = .Range("A2:E18").Find("#N/A", , xlValues, xlWhole, , , False)
   If Not rng Is Nothing Then
     i = rng.Row - 1
     .Range("A" & i & ":" & "E" & i).Copy .Range("G3")
   End If
 End With
End Sub
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档