返回字符串实例的第一列标题

返回字符串实例的第一列标题

我收集了一些在不同日期发表过演讲的演讲者。

Date,1/2/2023,1/2/2022,1/2/2021,1/2/2020,1/2/2019,1/2/2018
                        
1st-Speaker,Jim,John,Fred,Sam,Scott,Riley
2nd-Speaker,Henry,Susan,John,Henry,Scott,Hugo
Lunch,Bob,Haley,Jim,Ed,Orin,Clark
3rd-Speaker,Simba,Riley,Sam,Scott,Ed,Hal

我想找到他们发言的最近(第一个,最左边)的日期。使用:

=INDEX($B$1:$G$1,SUMPRODUCT(MAX(($B$3:$G$6=D13)*(COLUMN($B$3:$G$6))))-COLUMN($B$1)+1)

我可以得到他们交谈的第一个日期(最后一个,最右边)(D13 是我正在查询的说话者),但更改MAXMIN并没有返回任何东西。

我如何更新方程式以给出第一个实例而不是最后一个实例?

答案1

=INDEX($B$1:$G$1,1,MIN(IF($B$3:$G$6=Z1,COLUMN($B$3:$G$6)-COLUMN($B$3)+1)))

解释:

  • 如果数据与演讲者匹配,则返回相对于起始列 B3 的列号

    IF($B$3:$H$6=Z1,COLUMN($B$3:$H$6)-COLUMN($B$3)+1)
    
  • 在结果数组中查找最小值

    MIN(...)
    
  • 从最小值返回第一行(日期)的值

    INDEX($B$1:$H$1, 1, ...)
    

IFERROR(...,"")如果有人没有发言则添加句柄(我还必须将单元格格式化为特定的日期,否则它就是日期序列-或使用TEXT(..., "dd/mm/yyyy"))

答案2

如果您的原始数据如下:

在此处输入图片描述

并且您拥有 Microsoft 365,则可以在某些单元格中使用以下单个公式:

=LET(
    spkrs, SORT(UNIQUE(TOCOL($B$3:$G$6))),
    dts, BYROW(
        spkrs,
        LAMBDA(arr,
            MAX(
                $B$1:$G$1 *
                    ISNUMBER(FIND(arr, $B$3:$G$6))
            )
        )
    ),
    VSTACK(
        {"Speaker", "Most Recent Date"},
        HSTACK(spkrs, dts)
    )
)

结果将SPILL显示所有发言者的最近日期:

在此处输入图片描述

注意:您可以创建并使用结构化引用来代替硬编码的范围引用,Table这些引用会在您添加(或删除)数据时自动调整范围

如果您命名表格,Speaker则可以使用如下公式:

=LET(
    x, SORT(UNIQUE(TOCOL(DROP(Speaker, , 1)))),
    spkrs, FILTER(x, x <> ""),
    dts, BYROW(
        spkrs,
        LAMBDA(arr,
            MAX(
                DROP(Speaker[#Headers], , 1) *
                    ISNUMBER(
                        FIND(arr, DROP(Speaker, , 1))
                    )
            )
        )
    ),
    VSTACK(
        {"Speaker", "Most Recent Date"},
        HSTACK(spkrs, dts)
    )
)

答案3

此公式适用于 Excel 和 Google 表格。它首先构建数据的两行表示,最终在按名称过滤的列中找到 MIN() 日期。我最初尝试使用 MINIFS() 来执行现在由 FILTER() 处理的操作,但出现了错误:

=LET(crit, D13, 
dates,$B$1:$G$1,
namerow, TOROW($B$3:$G$6), 
daterow,HSTACK(dates,dates,dates,dates), 
tbl,VSTACK(daterow,namerow),
fltr,FILTER(tbl,INDEX(tbl,2)=crit),
MIN(INDEX(fltr,1)))

相关内容