VBA Excel将3列转换为Arrary

我一直在寻找一种方法来做到这一点,我觉得我正在打墙。 。 。 我是VBA的新手,所以我可能不会这样做。

我有一个如下所示的表格:

数据

我需要它看起来像这样:

结果

客户需要将这些数据用于各种目的。 他们尝试了一个Pivot Table,但是他们讨厌它的样子,最终用户也不喜欢它。 在最终格式之后,他们还对数据做了很多其他调整。

我能够获得名称和问题以正确的布局复制/粘贴到新的工作表。 然后,我试图做一个For Each循环来过滤名称,并将答案复制/粘贴/转置到新的工作表。 我采用了这种方法,因为问题和名字的数量总是各不相同。

我不明白我已经看到的代码,我不确定我在网上find的旧例子可以被操纵来匹配我的情况。

有什么build议么? 还是有另一个职位正在做一些我想要做的事情,我已经错过了?

谢谢!!

假设名字被sorting,每个名字都有相同的问题,你可以运行一个简单的“双重匹配-1”来得到答案作为工作表公式。 (在表1中的列表1和表2中的列表2)

=INDEX(sheet1!$C:$C,MATCH(B$1,INDEX(sheet1!$B:$B,MATCH($A2,sheet1!$A:$A,0)):sheet1!$B$99999,0)+MATCH($A2,sheet1!$A:$A,0)-1) 

B2的公式。 向右下方填充。

如果您不需要公式,请隐藏工作表并将值仅通过VBA复制/粘贴到另一个工作表。

在这里输入图像说明

名称不需要完整,但是“aabb”和“bbaa”可以一起工作,但“abab”或“baab”不会。 问题不需要以任何顺序排列,但没有“q1”的人会给他另一个名字find的下一个“q1”。

你可以简单的使用Power Pivot (一个免费的MS插件,在2010 – 2013年(又名Data --> Get & Transform在2016年)

仅仅

  • selectQuestions列到数据透视表(创build新列)
  • 值列 – > Answers
    • 高级选项Do not aggregate

在这里输入图像说明

这是使用您发布的数据的结果:

在这里输入图像说明

我做的唯一的格式更改是closures表选项下的筛选器button。