Google sheets 为特定范围内的每个非空单元格输出新行的公式

Google sheets 为特定范围内的每个非空单元格输出新行的公式,google-sheets,Google Sheets,我有一个数据范围,需要按特定子范围内的非空单元格进行筛选,同时为该子范围内的每个非空单元格生成新行 观察以下示例表,其中包含输入数据和所需输出: 对于每个不是空的1-4类型单元格,应输出一个新行,其中包含输入行中的日期、名称、类型和值 为了实现这一点,需要什么公式或函数 我对使用QUERY、VLOOKUP和FILTER并不陌生,但我无法通过公式实现所需的输出,甚至无法提出任何开始接近的结果 =ARRAYFORMULA({"Date", "Name", "Type", "Value"; QUERY

我有一个数据范围,需要按特定子范围内的非空单元格进行筛选,同时为该子范围内的每个非空单元格生成新行

观察以下示例表,其中包含输入数据和所需输出:

对于每个不是空的1-4类型单元格,应输出一个新行,其中包含输入行中的日期、名称、类型和值

为了实现这一点,需要什么公式或函数

我对使用QUERY、VLOOKUP和FILTER并不陌生,但我无法通过公式实现所需的输出,甚至无法提出任何开始接近的结果

=ARRAYFORMULA({"Date", "Name", "Type", "Value"; QUERY({
 QUERY({B3:I, IF(F3:F<>"", $F$2, )},
 "select Col1, Col2, Col9, Col5 where Col9 is not null", 0);
 QUERY({B3:I, IF(G3:G<>"", $G$2, )},
 "select Col1, Col2, Col9, Col6 where Col9 is not null", 0);
 QUERY({B3:I, IF(H3:H<>"", $H$2, )},
 "select Col1, Col2, Col9, Col7 where Col9 is not null", 0);
 QUERY({B3:I, IF(I3:I<>"", $I$2, )},
 "select Col1, Col2, Col9, Col8 where Col9 is not null", 0)},
 "select * order by Col1 asc", 0)})

另一个答案,在概念上类似于player0,但简单一点。它在形成完整的范围数组后选择列:

=arrayformula( 
  query( 
    { 
      B2:B, C2:C, iferror(F2:F/0, F2), F2:F; 
      B2:B, C2:C, iferror(G2:G/0, G2), G2:G; 
      B2:B, C2:C, iferror(H2:H/0, H2), H2:H; 
      B2:B, C2:C, iferror(I2:I/0, I2), I2:I 
    }, 
    "where Col4 is not null 
     order by Col1", 
    0 
  ) 
)
通过