如何将整个(非常大的)数据电子表格的长行分成多个较小的行

How to divide long rows into multiple smaller rows for an entire (very large) data spreadsheet

Google 包含当前格式数据的文档,后跟所需格式:https://docs.google.com/spreadsheets/d/1XlxEVcP6QpWYyOeflLmp_mKflCBclim_UQSeMkHByh8/edit?usp=sharing

我正在尝试创建一个模板来重新排列以糟糕格式导出的数据集。我已将 link 发布到 Google 文档,其中包含当前格式的数据示例以及我需要如何格式化数据。目前,给定人员的所有数据都在一行中,并且 ID # 在每条记录之前重复,如图所示。每条记录由 12 列组成,在一行中重复 31 次,每行总共有 372 个单元格。有 838 行(或没有 headers 的 837 行)。我需要一组公式或一个宏,将单行数据(372 个单元格)分成 31 行,每行 12 列,用于整个电子表格。我只能用一行来完成这个(使用 offset 函数然后再次使用 index),但我正在努力寻找一种方法让它应用于工作表上的每一行.第一行完成后,公式就不再继续了。理想情况下,重新排列的数据将出现在 new 工作表中。我不能只是手动分隔行并按 ID # 过滤它们,因为这样我每次重新运行报告时都必须重做。如果我可以进一步说明,请告诉我!

这是一个基于公式的解决方案。它假定您可以创建一个新的 sheet 来改造数据。根据您的描述,听起来这就是您想要的。我已经将示例简化为每行有 4 个类别和 3 个重复。更改下面的 4 和 3 以匹配您的 12 和 31。(这样的快照更难拍摄!)

数据与结果图片

数据。你可以假装我的专栏 header "A" 是你的 "ID".

结果。为简单起见,它重复了 header。你可以在最后删除那些。

Formula in A1 on Sheet2 并根据需要复制 4 列和向下复制尽可能多的行。

=INDEX(Sheet1!$A:$L,INT((ROW()-1)/3)+1,MOD(ROW()-1,3)*4+COLUMN())

工作原理

  • INDEX用于return整个数据数组中的给定单元格
  • INDEX 需要一行和一列来检索,所以我使用整数除法来确定行。我们知道结果中的给定行需要重复 header 的次数。在这种情况下 3. ROW() 指的是结果中的行,而 -1 是为了确保它从 0 开始,而不是 1.
  • INDEX 的专栏来自相同的想法。对于给定的行,它需要获取重复行上方的当前列 "pushed" 的列。这里的 MOD 确保即使行变大,列号也会在小范围内重复。

最后,这个公式确实依赖于从 A1 开始的新 sheet 上的结果。你可以用不同的方式来做,但公式会变得(甚至更多)一团糟。