如何将长行划分为多个较小的行,以用于整个(非常大的)数据电子表格

时间:2015-05-15 23:05:47

标签: vba excel-vba excel-formula excel-2010 excel

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

我正在尝试创建一个模板来重新排列以可怕格式导出的数据集。我发布了一个指向Google文档的链接,其中包含当前格式的数据示例,然后是我需要格式化的方式。目前,给定人员的所有数据都在一行中,并且在每个记录之前重复ID#,如图所示。每个记录由12列组成,每行重复31次,每行共计372个单元格。有838行(或837行没有标题)。我需要一组公式或一个宏,将一行数据(372个单元格)分成31行12列,用于整个电子表格。我只能用一行(使用offset函数然后再使用index)完成此操作,但我很难找到一种方法使其适用于工作表上的每一行。第一行完成后,公式就不再进一步了。理想情况下,重新排列的数据将显示在工作表中。我不能手动分隔行并按ID#过滤它们,因为每次重新运行报告时我都必须重做。如果我能进一步澄清,请告诉我!

1 个答案:

答案 0 :(得分:1)

这是一个基于公式的解决方案。它假定您可以创建一个新表来重组数据。根据您的描述,这样的声音无论如何都是您想要的。我对这个例子进行了贬低,每行有4个类别和3个重复。更改下面的4和3以匹配您的12和31.(更难拍摄这样的快照!)

数据和结果的图片。

数据。你可以假装我的列标题" A"是你的" ID"。

data

结果。为简单起见,它重复标题。你可以在最后删除它们。

results

A1上的Sheet2中的

公式,并根据需要复制了4列以及更多行。

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

工作原理

  • INDEX用于从整个数据的数组中返回给定的单元格
  • INDEX需要一行和一列来检索,所以我使用整数除法来确定行。我们知道结果中的给定行需要重复多次重复的标题。在这种情况下3. ROW()引用结果中的行,-1是确保它从0而不是1开始。
  • INDEX的列来自同一个想法。对于给定的行,它需要获得一个当前列的列"推送"重复的行。此处的MOD可确保列号在小范围内重复,即使该行变为大数。

最后,这个公式实际上依赖于在新表上A1开始的结果。你可以采用不同的方式,但公式将变得更糟(或更多)。