【问题标题】:How to create a week calendar sheet in Google Sheets using Array Formulas?如何使用数组公式在 Google 表格中创建周历表?
【发布时间】:2021-03-08 18:18:10
【问题描述】:

我有一个带有条目的“DB”表,日期为周数:

NAME   | ACTION  | WEEK
------------------------
carrot | harvest | 48
carrot | wash    | 48
garlic | plant   | 49

(为方便起见,将列设置为命名范围。)

我想在第二张纸上自动生成每周行动日历,如下所示:

(A)       || (B) | (C)     | (D)   | (E) 
-----------------------------------------
NAME / WK || 47  | 48      | 49    | 50 | (1)
=========================================
carrot    ||     | harvest |       |    | (2)
          ||     | wash    |       |    | 
-----------------------------------------
garlic    ||     |         | plant |    | (3)

如果我要使用手动插值,我会在上面示例中的值单元格 (B2:E3) 中放入这样的公式:

=IFNA(JOIN(CHAR(10), FILTER(ACTIONS, WEEK=B$1, NAME=$A2)), "")

(这个特定的公式将放在单元格 B2 中。)

但是,我不想在此日历中使用手动插值:当我在 DB 表中添加、更改或删除行时,日历表应该会自动更新,而无需我更改任何内容。

有没有办法通过在(比如说)B2 单元格中放入一个公式来做到这一点,而不是手动填充 B2:E3 范围内的每个单元格? (假设我已经自动填充了 A:A 和 1:1,但如有必要,可以将其移到该公式中。)

【问题讨论】:

    标签: google-sheets google-sheets-formula array-formulas


    【解决方案1】:

    好吧,我花了更长的时间,而且我有一个更丑陋的公式,我现在什至不会尝试优化,但如果有人想考虑一种不同的方式来做到这一点,与 player0 的解决方案相比,这里是另一个公式:

    =ArrayFormula(query(
     {trim(split(transpose(query(
       { query(   query({A2:A & "~" & C2:C & "~", "♦" & B2:B},
                    "select max(Col2) where Col1<>'~~' group by Col2 pivot Col1",0),"limit 0",1);
         substitute(regexreplace(trim( 
           query(
            query(query({A2:A & "~" & C2:C & "~", "♦" & B2:B},
                    "select max(Col2) where Col1<>'~~' group by Col2 pivot Col1",0),"offset 1",0),,99^99)
           ), "^♦","" ),"♦",char(10))
       },,99^99)),"~",1,0))
     },"select Col1, max(Col3) group by Col1 pivot Col2",0))
    

    也许不使用FLATTEN 是造成复杂设计的一个因素...

    【讨论】:

      【解决方案2】:

      尝试:

      =ARRAYFORMULA(QUERY(TRIM(SPLIT(FLATTEN(QUERY(TRANSPOSE(QUERY(QUERY(
       {A2:A&"♦", B2:B, "♦"&C2:C, CHAR(10)&B2:B}, 
       "select Col1,max(Col4),Col3 
        where Col2 is not null 
        group by Col1,Col3 
        pivot Col2"), "offset 1", 0)),,9^9)), "♦")), 
       "select Col1,max(Col2) 
        group by Col1 
        pivot Col3
        label Col1'NAME / WK'"))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-04
        • 2019-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多