代码之家  ›  专栏  ›  技术社区  ›  andy leary

如何将逻辑运算符与动态数组一起使用?

  •  1
  • andy leary  · 技术社区  · 2 周前

    我有下表,我们有相同的身份证和日期。但是,我想创建一个数组,根据ID和日期更改ID。

    我尝试过的公式是:

    =IF(AND(DROP(TAKE(A:A,COUNTA(A:A)),1)=12345,
     DROP(TAKE(B:B,COUNTA(A:A)),1)<DATE(2024,1,1)),"54321",
     DROP(TAKE(A:A,COUNTA(A:A)),1))
    

    但记录3没有给出正确答案

    enter image description here

    1 回复  |  直到 2 周前
        1
  •  1
  •   Mayukh Bhattacharya    2 周前

    您可以尝试使用以下公式:

    enter image description here


    =IF((A2:A4=12345)*(B2:B4<DATE(2024,1,1)),54321,A2:A4)
    

    或者,也可以使用以下内容,这假设 ID 列作为最后一行的基础,您不需要;我不需要 LAMBDA() helper函数,而不是使用 AND() 函数使用 * 操作人员

    =LET(
         _LastRow, MATCH(2,1/(A:A<>"")),
         _ID, DROP(TAKE(A:A,_LastRow),1),
         _Date, DROP(TAKE(B:B,_LastRow),1),
         IF((_ID=12345)*(_Date<DATE(2024,1,1)),54321,_ID))
    

    注:使用 * 因为在布尔逻辑运算中,规则规定,乘法对应于 和() 逻辑函数,而加法 + 对应于 OR() 逻辑函数。


    附录:如果您想使用 和() 具体来说,您需要 LAMBDA() 助手函数,如 MAP() :

    =LET(
         _LastRow, MATCH(2,1/(A:A<>"")),
         _ID, DROP(TAKE(A:A,_LastRow),1),
         _Date, DROP(TAKE(B:B,_LastRow),1),
         MAP(_ID,_Date,LAMBDA(α,δ,
         IF(AND(α=12345,δ<DATE(2024,1,1)),54321,α))))
    

        2
  •  0
  •   nkalvi    2 周前

    放下另一个镜头,

    =LAMBDA(data, from_id, to_id, before_date_,
        LET(
            data, DROP(TAKE(data, COUNTA(TAKE(data, , 1))), 1),
            id, INDEX(data, 0, 1),
            date_, TAKE(data, , -1),
            IF((id = from_id) * (date_ < before_date_), to_id, id)
        )
    )($A:$B, 12345, "54321", DATE(2024, 1, 1))
    

    Formula and result