Excelmacros将数据移动到其他列下面的列中

我有从A到I的9列的数据。我需要做的是移动D,E,F和G,H,我下面的A,B,C所以它是3列。 我有的行数是可变的。

所以我现在的数据看起来像这样

 ABCDEFGHI
 1 2 3 4 5 6 7 8 9

我需要它看起来像这样:

 ABC
 1 2 3 
 4 5 6 
 7 8 9 

看起来像是FREE FREELANCER

在今天的情节中

小男孩:请问我可以回答这个问题吗?

免费的自由职业者:但当然,小男孩! 我敢说,这是我们美好的朋友, arrays的工作

LB: FFL先生,arrays是什么?

FFL:你可以谷歌,它会给你1100万以上的结果 。 不要问我!

LB:但是这对我们有什么帮助呢?

FFL:很简单,它可以让我们想象和创buildmatrix! 由于OP想要一个一维(1D)数据集的类matrix排列,所以我们可以将它分配给一个matrixtypes的数组,然后我们可以将其转移回Excel!

LB:我…不明白。 请帮帮我! 请给我一个答案,好吗?

FFL:但我还没有完成! 有一些骨干,小男孩,了解这个东西! 首先,让我们走这条路! 我们来创build一个3行3列的数组!

 Dim Arr(1 to 3, 1 to 3) As Variant 

FFL: …在那里,我们有一个数组! 这是一个简单的xy图,我们可以用我们的数据填充。 由于他只有9个数据点,他希望以3x3matrix排列,所以我们知道需要设置数组的大小。

LB:嘿,看起来很简单,FFL!

FFL:是的! 现在看下面的内容。 对于我们图中的每个“坐标”,我们分配一个值。

 Arr(1, 1) = Cells(2, 1).Value Arr(1, 2) = Cells(2, 2).Value Arr(1, 3) = Cells(2, 3).Value Arr(2, 1) = Cells(2, 4).Value Arr(2, 2) = Cells(2, 5).Value Arr(2, 3) = Cells(2, 6).Value Arr(3, 1) = Cells(2, 7).Value Arr(3, 2) = Cells(2, 8).Value Arr(3, 3) = Cells(2, 9).Value 

FFL:很简单,我们已经能够将这些值绘制到我们的数组中。 现在我知道数组的第三行和第二列将在工作表的第二行和第八列中具有单元格的值!

LB:哇,这样看起来很容易 – 很好玩! 感谢FFL先生!

FFL:不客气,小男孩! 但不是那么快,我看到上面9行的东西…我看到一个…模式! 有一个模式,小男孩。 好好告诉我!

LB:模式? 但是我看到的只是连续的数字和东西!

FFL:当然! 连续的数字对我们有好处,因为我们可以使用… FOR LOOPS ! 现在让我们简化上面的…我知道我想要3行3列。 而且我知道我的价值观是在9个不同的细胞中。 我要做的就是迭代每行,然后遍历数组的每一列,并为它们赋值。 由于我想要的值的列发生了变化,我将在最内层的循环中增加它,所以我的“指针”会移动!

LB: FFL先生,不要把所有的东西都吓到我!

FFL:啊,球确实让这个人,所以让我们继续前进的代码!

 ColIndex = 1 For Iter1 = 1 To 3 For Iter2 = 1 To 3 Arr(Iter1, Iter2) = Cells(2, ColIndex).Value ColIndex = ColIndex + 1 Next Next 

FFL:在那里,我减less了一个相当简单和直观的循环! 这样做的好处是,如果OP想要根据更长的单元格创build更大的地块,他将只使用这几行创build它们!

LB:哇! 这看起来真棒,先生! 但我怎么把它放回去,我怎么样?

FFL:那我们再做一个循环! 你真是个假人,小男孩!

 For i = 1 To 3 For j = 1 To 3 Cells(i + 1, j).Value = Arr(i, j) Next Next 

FFL: Mwahahaha! 现在我们用这么长的价值观填补了我们想要的所有细胞! 我会和你一起离开,小男孩,删除不需要的列和东西的方式。

LB:但是……但是…… FFL先生,你为什么不把新细胞的价值等同于循环中旧细胞的价值呢? 为什么使用数组?

FFL: … Err … Hnggrrr …你为什么在意? IT'S FREE!!!

直到下一次在免费FREELANCER

EPISODE RECAP(完整代码):

 Sub TransformToTable() Dim Arr(1 To 3, 1 To 3) As Variant ColIndex = 1 For Iter1 = 1 To 3 For Iter2 = 1 To 3 Arr(Iter1, Iter2) = Cells(2, ColIndex).Value ColIndex = ColIndex + 1 Next Next For i = 1 To 3 For j = 1 To 3 Cells(i + 1, j).Value = Arr(i, j) Next Next End Sub 

@ user1759942提到的通常是真实的,但是代码已经被写入,尽pipe在Word中。 复制您的数据并粘贴特殊…作为未格式化的文本到Word中。 select全部,插入>表格 – 表格并将文本转换为表格…列数: 3 。 复制回Excel并删除第二和第三行。