0

我需要将 Excel 矩阵“A”转换为表“B”,但不使用 VBA。最好是 'reverse pivot', 'unpivot', 'flatten', 'normalize'... 我拥有和需要接收的图片 有类似的主题,但找不到我感兴趣的确切主题。这里是描述了我正在寻找的内容,但在 VBA 中完成: excel 宏(VBA)将多列转置为多行 ,此处没有 VBA,但仅保留并重复 1 列: 将矩阵转换为 3 列表('反向枢轴' , 'unpivot', 'flatten', 'normalize')

4

1 回答 1

0

着眼于两组数量,你要做的实质是将N列3行的表“A”转换为3*N行1列的表“B”。

表“B”左侧(或右侧)的一对辅助列可用于识别“A”的哪一行和哪一列与表“B”中的每一行匹配。这些帮助列看起来像

Row Col 
 1   1
 2   1
 3   1
  ...     
 N   1
 1   2
 2   2
 3   2
  ...
 N   2
 1   3
 2   3
 3   3
  ...
 N   3

从包含对的初始行开始,为下一行中的对(1,1)创建几个=IF()公式是一项简单的任务,如果向下复制,将生成剩余的行和列值对。

一旦生成,这些(Row, Col)对几乎提供了生成表“B”的行所需的一切。

表“B”中的CustomerProduct Code列是使用=INDEX(tableAcol,Row)where派生的,tableACol表示表“A”中的相应列,例如$B$3:$B$13for Customer。该Quantity列是使用=INDEX(tableAquantities, Row, Col)其中tableAquantities包含数量值的表“A”中的 N 行和 3 列的范围生成的。该Month列需要 3 个单元格的范围,这些单元格排列为包含“一月”、“二月”、“三月”值的连续行或列,并在表“B”中使用=INDEX(months, Col)代表months3 个单元格范围的位置生成。

有一种替代方法可以在不显式添加辅助列的情况下获得相同的结果。这使用该=ROW()函数计算表“B”的每一行的数据行号,然后在进一步的公式中使用它来计算相应(Row,Col)对的两个值。这种方法导致生成表“B”的一些繁琐且相当重复的公式。如果没有理由避免使用辅助列,那么就使用它们——它们代表了一种更简单、更容易理解的方法。

于 2017-08-20T16:14:27.677 回答