Sheet 的部分转置
Partial transpose of Sheet
我有一个 Google Sheet,格式如下:
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| 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 | | |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
前 3 列是特定字段,所有其他列与给定(和静态)范围内的特定日期相关。
我需要将 table 转换为以下格式:
+---------+---------+---------+------------+-----------+
| 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?
下面是示例 Sheet 演示:https://docs.google.com/spreadsheets/d/1cprzD96i-4NQ8tieA_nwd8s43yKF-M8Kww4yWNfB6tg/edit#gid=505040170
- 在Sheet
Start
可以看到初始数据和格式,3个静态列和每个da
- 在Sheet
End
中可以看到我要的输出格式,同样的3个静态列,但是日期和与日期相关的单元格值被转置为一行。
您可以看到我使用的公式,每一行 TRANSPOSE
,其中我 select IV 列的天数和 V 行一次一行的天数。
对于 3 个静态列,我为当天与该行相关的每个实例复制了公式。
这是可行的,但需要大量手动工作来设置每个 TRANSPOSE
。我想知道是否有更自动的方法来执行此操作(除了使用 AppsScript,在那种情况下,如果没有其他解决方案可用,我已经计划这样做)
=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); "♦")); "♠")))
我有一个 Google Sheet,格式如下:
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
| 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 | | |
+---------+---------+---------+------------+------------+------------+------------+--------+--------+
前 3 列是特定字段,所有其他列与给定(和静态)范围内的特定日期相关。
我需要将 table 转换为以下格式:
+---------+---------+---------+------------+-----------+
| 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?
下面是示例 Sheet 演示:https://docs.google.com/spreadsheets/d/1cprzD96i-4NQ8tieA_nwd8s43yKF-M8Kww4yWNfB6tg/edit#gid=505040170
- 在Sheet
Start
可以看到初始数据和格式,3个静态列和每个da - 在Sheet
End
中可以看到我要的输出格式,同样的3个静态列,但是日期和与日期相关的单元格值被转置为一行。
您可以看到我使用的公式,每一行 TRANSPOSE
,其中我 select IV 列的天数和 V 行一次一行的天数。
对于 3 个静态列,我为当天与该行相关的每个实例复制了公式。
这是可行的,但需要大量手动工作来设置每个 TRANSPOSE
。我想知道是否有更自动的方法来执行此操作(除了使用 AppsScript,在那种情况下,如果没有其他解决方案可用,我已经计划这样做)
=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); "♦")); "♠")))