首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套Xlookup第一个非空白单元格

嵌套Xlookup第一个非空白单元格
EN

Stack Overflow用户
提问于 2022-11-20 01:42:46
回答 2查看 65关注 0票数 0
代码语言:javascript
复制
Name    Day 1    Day2   Day 3
John    3       2
John    2   1   4

使用双Xlookup,当我搜索John和Day 2时,我无法得到值1,并且我尝试Index/Xmatch/xmatch返回我1,但没有运气。有什么办法吗?

@更新示例图片此处@ 在这里输入图像描述

这是我目前的公式

代码语言:javascript
复制
=XLOOKUP("John",$A$2:$A$3,XLOOKUP("Day 2",$B$1:$D$1,$B$2:$D$3),,2)
EN

回答 2

Stack Overflow用户

发布于 2022-11-20 08:27:24

请注意,您的评论显示了与您的问题不同的情况(名称中的通配符搜索)。

下面的公式将导致通配符搜索名称的第一个找到的值,从F2中的搜索字符串开始,并在F3中匹配日期

代码语言:javascript
复制
=LET(range,A1:D3,
     c,1-COLUMNS(range),
     r,1-ROWS(range),
       days,TAKE(range,1,c),
       names,TAKE(range,r,1),
       data,TAKE(range,r,c),
            x,FILTER(data,days=F3),
TAKE(
     FILTER(x,
              (ISNUMBER(XMATCH(F2&"*",names,2)))*
              (x<>"")),
     1))

票数 0
EN

Stack Overflow用户

发布于 2022-11-22 05:24:26

您不能使用XLOOKUP双向精确匹配,因为它返回第一个匹配,并且在列名称中有重复的值。

此解决方案根据查找值从输入数据返回第一个非空白值。在单元格H2中放置以下公式:

代码语言:javascript
复制
=LET(colIdx, XMATCH(G3,A1:D1), tb, A2:D5, lkCol, INDEX(tb,, colIdx),
  INDEX(TAKE(FILTER(tb, (A2:A5=G2) * (lkCol<>0), "Not Found"),1),colidx)
)

这是输出:

我们使用LET来简化阅读和作文。首先,我们需要确定我们感兴趣的那一栏。名称colIdx具有列索引。注意,为了只处理一个数据范围(tb),我搜索所有列名,包括Name。现在,我们需要标识相应的列值。名称lkCol表示这一点。

现在,我们有了筛选和选择要查找的信息所需的所有元素:

代码语言:javascript
复制
FILTER(tb, (A2:A5=G2) * (lkCol<>0), "Not Found")

输出将是来自tb的行,用于名称G2,而对于来自G3列名的非空行,则进行筛选。输出包含所有列,现在我们需要选择我们感兴趣的列,并且只需要选择第一个非空值。TAKE只提取第一行,INDEX提取相应的列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74505088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档