重新排序大型 Excel 文件中的数据

重新排序大型 Excel 文件中的数据

我需要重新排序大型 Excel 文件中的数据。请建议如何获取所需的输出。

excel文件的截图

答案1

我想到了很多种方法。一种传统方法可能是用来OFFSET()计算每个地址所需的部分。但我想到了另一种方法:

=VLOOKUP(A$11,INDIRECT(CHAR(64+IF(COLUMN()<=3,1,3))&(ROW()-11)*3-1&":"&CHAR(64+IF(COLUMN()<=3,2,4))&(ROW()-11)*3-1+2),2,FALSE)

此公式的设置假设显示的材料在第 1 行中有“旧文件”,并且用户名的第一个实例在单元格 A2 中。它还要求列标题与旧文件中每个数据位旁边的标签相同。

基本思路是,您知道新文件标题所在的行,并且可以手动将其输入公式作为要查找的值。仅对行使用 $(不会改变)可让列标签在您在输出行中复制时发生变化。这样,每个单元格的查找都将使用其列标题完成。然而,只需要一个公式,而不是为每一列编辑一个公式。

每行查找的表格范围不同,但公式相同,只是公式结果不同。因此,相同的公式可以不经修改地向下和向右复制。只需要一个公式。

对于表格引用,您需要计算两种项目,即列和行,并且必须找到每种项目的两个。我IF()对字母部分进行了测试。公式中有两个这样的项目,因为范围需要一个起始单元格和一个结束单元格。对于范围的开始,我使用了一个结果为前三列给出 1 的结果,其余列给出 3 的结果(如果您的列数确实比示例中显示的多,则需要“更多”,但相对容易),因此前三个查找中使用的范围的开始将是列 A,而其他三个范围的开始列将是列 C。“A”的字符代码是 65,因此如果将上面的代码减一,即 64,您将得到 65 和 67,因此“A”和“C”。对于范围的结束列字母,情况类似,但给出IF()2 或 4,从而得到“B”或“D”。

对于行计算,这更容易。对于范围的行号的开始,您需要您所在行的行号,并且必须从中减去 11(标题行的行号)(因此您说我向下一行,向下两行,等等)。由于您的数据分为三行组,因此您将其乘以三。如果您有八个行组,则将其乘以八,依此类推。最后,为“旧文件”标签的行减去 1。因此,上面一行,减去 1。对于数据上方的 13 行,减去 13,依此类推。

对于范围末尾的行号,计算方法相同,但是在减去 1 之后加 2。或者合并值,但是随着时间的推移,这会使公式的维护变得更加困难。

这一切都包含在一个INDIRECT()函数中,以将其变成一个真正的男孩,呃,真正的范围。

由于每个查找范围都是两列宽,因此您无需调整两个不同查找的查找列。并使用“FALSE”作为查找类型,这样您就可以获得精确的结果,而不是“接近”的结果。如果原始数据中的标签不正确,查找就会找不到完美匹配,这时就会发生这种情况。您会看到一个错误,您可以在提取之外“计数”它,并在将数据修复为永久数据之前进行修复。(COUNTIF()在某个单元格中使用,查找错误。当然,希望是 0。)更大的原因是那些旧数据标题没有排序(例如,用户名在书号之前,因此如果您使用 TRUE,您的六次查找中有三次会给出错误的结果!

人们通常没有这样的内部标签,因此必须使用这种OFFSET()方法。

我相信您的数据也适合使用设置数据透视表的准备功能之一。它将不在单列标签中的数据放在旁边的单列数据中,并将其放在一起。如果您这样做了,您可以停在那里,不再继续使用数据透视表,而是使用将TRANSPOSE()6 行的集合变成水平的一行、六列显示。使用OFFSET()INDIRECT()(如上所示)可以让您将它们全部放在一起,或者更简单,您可以有一行数据、五行空白,然后重复,然后将数据复制并粘贴为值,然后排序以将它们全部移动到一起,没有空白行。

但是并排的东西让我认为数据透视表准备功能在这里不起作用,所以我没有研究它(我不经常使用数据透视表)。

但是上面的公式有效,只需复制一个,宽度为六列,行数为您需要的任意数量。

相关内容