纸张的部分转置

问题描述 投票:0回答:1

我有一个具有这种格式的Google表格:

+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| Field_A | Field_B | Field_C | 24/09/2019 | 25/09/2019 | 26/09/2019 | 27/09/2019 | day... | day... |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| ValX    | ValY    | ValZ    | Val1       | Val2       | Val3       | Val4       |        |        |
| ValW    | ValY    | ValZ    | Val5       | Val6       | Val7       | Val8       |        |        |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+

前三列是特定字段,所有其他列都与给定(和静态)范围内的某一天相关。

我需要以以下格式转换表:


+---------+---------+---------+------------+-----------+
| Field_A | Field_B | Field_C |    Date    | DateValue |
+---------+---------+---------+------------+-----------+
| ValX    | Valy    | Valz    | 24/09/2019 | Val1      |
| ValX    | Valy    | Valz    | 25/09/2019 | Val2      |
| ValX    | Valy    | Valz    | 26/09/2019 | Val3      |
| ...     |         |         |            |           |
+---------+---------+---------+------------+-----------+

[基本上,前3列按原样收集,但以2个值转置的天列(甚至是正确的术语?):

  • 日期
  • 与日期相关的单元格中的值

可以通过公式来实现,还是需要创建一个有界的AppsScript?

以下是样本工作表演示:https://docs.google.com/spreadsheets/d/1cprzD96i-4NQ8tieA_nwd8s43yKF-M8Kww4yWNfB6tg/edit#gid=505040170

  • 在Sheet Start中,您可以看到初始数据和格式,3个静态列和每个数据列一个列
  • 在工作表End中,您可以看到我正在寻找的输出格式,相同的3个静态列,但与日期相关的日期和单元格值作为一行转置。

您可以看到我使用的公式,每行TRANSPOSE,在这里我为IV列选择日期,为V行一次选择一行。对于3个静态列,我针对与该行相关的一天中的每个实例复制了公式。这是可行的,但需要大量的手动工作才能设置每个TRANSPOSE。我想知道是否有更自动的方法(除了使用AppsScript之外,在这种情况下,如果没有其他解决方案,我已经在计划这样做)

google-sheets transpose google-sheets-formula array-formulas google-sheets-query
1个回答
0
投票
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
 IF(Start!D2:F<>""; "♦"&TRANSPOSE(QUERY(TRANSPOSE(Start!A2:C&"♠");;999^99))&
 TEXT(Start!D1:F1; "dd/mm/yyyy")&"♠"&Start!D2:F; ));;999^99));;999^99); "♦")); "♠")))

0

© www.soinside.com 2019 - 2024. All rights reserved.