Excel宏可以在其他列下方的列中移动数据

时间:2014-02-03 21:02:34

标签: excel excel-vba vba

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

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

A B C D E F G H I   
1 2 3 4 5 6 7 8 9

我需要它看起来像这样:

A B C
1 2 3 
4 5 6 
7 8 9 

2 个答案:

答案 0 :(得分:4)

看起来像是 FREE FREELANCER 的作业!

今天的剧集......

小男孩:我可以获得这个问题的答案吗?

自由自由职业者但当然,小男孩!我敢说,这是我们这位好朋友的工作,阵列

LB:什么是数组,FFL先生?

FFL:您可以Google that and it'll give you upwards of 11 million results。不要问我!

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

FFL:很容易,它可以让我们想象和创建矩阵!由于OP想要一维(1D)数据集的矩阵排列,我们可以将其分配给类似矩阵的数组,然后我们可以将其传输回Excel!

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

FFL:但我还没有完成!有一些骨干,小男孩,要了解这些东西!首先,让我们做很长的路!让我们创建一个包含3行3列的数组!

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

FFL: ......在那里,我们有一个阵列!这是一个简单的x-y图,我们可以填充我们的数据。由于他只想要在3x3矩阵中排列9个数据点,因此我们知道将数组设置为所需的大小。

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:在那里,我把它简化为一个相当简单直观的循环!这样做的好处是,如果OP想要根据更长的细胞范围创建更大的图,他只会使用这几行来创建它们!

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: ......呃...... Hnggrrr ......你为什么关心?的 IT'S FREE!!!

直到下次 免费自由放电

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

答案 1 :(得分:0)

@ user1759942提到的内容通常是正确的,但代码已经编写,尽管在Word中。复制数据并将特殊粘贴...作为无格式文本粘贴到Word中。选择全部,插入>表 - 表和转换文本到表...列数:3。复制回Excel并删除第二行和第三行。