将两张纸合并为 Google 张
Combine two sheets in Google sheets
我正在尝试将两个 sheet 组合成一个 Google Sheet。
第一个 sheet 包含一个简单的名称列表,类似于:
+--------+
| Name |
+--------+
| Bob |
| Vivian |
| Fred |
+--------+
第二个 sheet 包含类似于以下的任务列表:
+------------+---------+
| Task | Task ID |
+------------+---------+
| Do Dishes | 1 |
| Vacuum | 2 |
| Do laundry | 3 |
+------------+---------+
我想将这些组合起来,这样我就可以得到一个 sheet,其中每个名称的任务都在单独的行中:
+--------+------------+---------+
| Name | Task | Task ID |
+--------+------------+---------+
| Bob | Do Dishes | 1 |
| Bob | Vacuum | 2 |
| Bob | Do laundry | 3 |
| Vivian | Do Dishes | 1 |
| Vivian | Vacuum | 2 |
| Vivian | Do laundry | 3 |
| Fred | Do Dishes | 1 |
| Fred | Vacuum | 2 |
| Fred | Do laundry | 3 |
+--------+------------+---------+
真实的数据集要大得多,所以我需要一个公式来动态地做到这一点。我尝试修改 QUERY 和 VLOOKUP,但我真的一无所获。
下面是共享的 sheet,其中包含与上面相同的虚拟数据。任何帮助将不胜感激!
https://docs.google.com/spreadsheets/d/1yosNoGj-PKf2Yua7-3mN3oCxIklr3IaBDojUgLunjWg/edit?usp=sharing
这是一种方法,需要一点数学知识。在你想要的 sheet 上,将你的 header 放在第 1 行(如果你想花哨的话,你可以将它们设为公式 = 其他 sheet 的标题,这样你如果重命名,请保持一致)。我假设名字在 A 列中。
在你想要的sheet的A2,放=index(Names!A:A,2+QUOTIENT(row()-2,3))
,然后往下拉。这将对每个名称执行 3 次。 [如果您最终在任务 sheet 上有更多列,请增加 3,或使其成为一个函数]。
现在在 B2 中放置 =index(Tasks!A:A,2+mod(1+row(),3))
并将其向右拖动到 C 列中并根据需要向下拖动(对于两列)。这将循环遍历每个用户的条目。
我喜欢这个问题的清晰度。
编辑:以下是适用于处理不同数量任务的相同公式。
=index(Names!A:A,2+QUOTIENT(row()-2,countA(Tasks!A:A)-1))
和
=index(Tasks!A:A,2+mod(countA(Tasks!A:A)-3+row(),countA(Tasks!A:A)-1))
如果你想让它更透明一点,你可以使用 countA(Tasks!A:A)
代替 countA(Tasks!A:A)-1)
,并将 -3 更改为 -2(其中 2 是数据所在的行start 并且 -1 消失了,因为 header "Task" 不算作任务)。
我正在尝试将两个 sheet 组合成一个 Google Sheet。
第一个 sheet 包含一个简单的名称列表,类似于:
+--------+
| Name |
+--------+
| Bob |
| Vivian |
| Fred |
+--------+
第二个 sheet 包含类似于以下的任务列表:
+------------+---------+
| Task | Task ID |
+------------+---------+
| Do Dishes | 1 |
| Vacuum | 2 |
| Do laundry | 3 |
+------------+---------+
我想将这些组合起来,这样我就可以得到一个 sheet,其中每个名称的任务都在单独的行中:
+--------+------------+---------+
| Name | Task | Task ID |
+--------+------------+---------+
| Bob | Do Dishes | 1 |
| Bob | Vacuum | 2 |
| Bob | Do laundry | 3 |
| Vivian | Do Dishes | 1 |
| Vivian | Vacuum | 2 |
| Vivian | Do laundry | 3 |
| Fred | Do Dishes | 1 |
| Fred | Vacuum | 2 |
| Fred | Do laundry | 3 |
+--------+------------+---------+
真实的数据集要大得多,所以我需要一个公式来动态地做到这一点。我尝试修改 QUERY 和 VLOOKUP,但我真的一无所获。
下面是共享的 sheet,其中包含与上面相同的虚拟数据。任何帮助将不胜感激!
https://docs.google.com/spreadsheets/d/1yosNoGj-PKf2Yua7-3mN3oCxIklr3IaBDojUgLunjWg/edit?usp=sharing
这是一种方法,需要一点数学知识。在你想要的 sheet 上,将你的 header 放在第 1 行(如果你想花哨的话,你可以将它们设为公式 = 其他 sheet 的标题,这样你如果重命名,请保持一致)。我假设名字在 A 列中。
在你想要的sheet的A2,放=index(Names!A:A,2+QUOTIENT(row()-2,3))
,然后往下拉。这将对每个名称执行 3 次。 [如果您最终在任务 sheet 上有更多列,请增加 3,或使其成为一个函数]。
现在在 B2 中放置 =index(Tasks!A:A,2+mod(1+row(),3))
并将其向右拖动到 C 列中并根据需要向下拖动(对于两列)。这将循环遍历每个用户的条目。
我喜欢这个问题的清晰度。
编辑:以下是适用于处理不同数量任务的相同公式。
=index(Names!A:A,2+QUOTIENT(row()-2,countA(Tasks!A:A)-1))
和
=index(Tasks!A:A,2+mod(countA(Tasks!A:A)-3+row(),countA(Tasks!A:A)-1))
如果你想让它更透明一点,你可以使用 countA(Tasks!A:A)
代替 countA(Tasks!A:A)-1)
,并将 -3 更改为 -2(其中 2 是数据所在的行start 并且 -1 消失了,因为 header "Task" 不算作任务)。