将数据从列排列到矩阵

时间:2017-02-12 16:38:02

标签: excel excel-vba vba

我有这样的数据集:

X  Y  Z
x1 y1 z1
x1 y2 z2
x1 y3 z3
x2 y1 z4
x2 y2 z5
x2 y3 z6

我需要安排到这样的表格中:

   y1 y2 y3
x1 z1 z2 z3
x2 z4 z5 z6

使用vba有效的方法吗?

1 个答案:

答案 0 :(得分:0)

这必须是VBA解决方案吗?你可以用单元格公式轻松地做到这一点......

您可以使用数据>获取唯一的XY值。删除重复项,然后将它们排列为您想要的表格标题。

Layout

然后使用以下公式填充XY列和表格的Z值:

Formulas

即,对于XY连接:

=CONCAT(A2,",",B2)

您可以在第一个单元格中输入此内容,然后使用AutoFill handle填充整个列。

对于表的Z值,我们使用XY值作为MATCH的查找,它返回匹配的XY值的行来自同一串联表的标题列/行。

  =INDIRECT(CONCAT("C", MATCH(CONCAT($F2,",",G$1),$D:$D,0)))

将其输入左上角的单元格,再次拖动它以填充表格。

请注意公式中的美元符号,即停止自动填充以相对调整这些行/列,将它们固定为列/行标题。

如果你真的需要一个VBA解决方案,它将是可行的,但你最大的任务将是

1. Making sure the row/column header values are unique, and looking up where they are for each new row.
2. Handling what happens when they aren't unique (if your data input allows this)

否则,遵循与上述单元格公式类似的逻辑!

编辑:

@Scott建议主查找表的等效函数运行良好。我添加了更多的美元符号,以便可以使用自动填充

=INDEX($C:$C, MATCH(CONCAT($F2,",",G$1),$D:$D,0))