我需要将 Excel 矩阵“A”转换为表“B”,但不使用 VBA。最好是 'reverse pivot', 'unpivot', 'flatten', 'normalize'... 我拥有和需要接收的图片 有类似的主题,但找不到我感兴趣的确切主题。这里是描述了我正在寻找的内容,但在 VBA 中完成: excel 宏(VBA)将多列转置为多行 ,此处没有 VBA,但仅保留并重复 1 列: 将矩阵转换为 3 列表('反向枢轴' , 'unpivot', 'flatten', 'normalize')
1 回答
着眼于两组数量,你要做的实质是将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”中的Customer
和Product Code
列是使用=INDEX(tableAcol,Row)
where派生的,tableACol
表示表“A”中的相应列,例如$B$3:$B$13
for Customer
。该Quantity
列是使用=INDEX(tableAquantities, Row, Col)
其中tableAquantities
包含数量值的表“A”中的 N 行和 3 列的范围生成的。该Month
列需要 3 个单元格的范围,这些单元格排列为包含“一月”、“二月”、“三月”值的连续行或列,并在表“B”中使用=INDEX(months, Col)
代表months
3 个单元格范围的位置生成。
有一种替代方法可以在不显式添加辅助列的情况下获得相同的结果。这使用该=ROW()
函数计算表“B”的每一行的数据行号,然后在进一步的公式中使用它来计算相应(Row,Col)
对的两个值。这种方法导致生成表“B”的一些繁琐且相当重复的公式。如果没有理由避免使用辅助列,那么就使用它们——它们代表了一种更简单、更容易理解的方法。