Excel宏移动列

时间:2013-10-30 16:43:39

标签: excel vba

基本上我希望将一个位置的列移动到另一个位置。

561  DISK_GROUP_003 0   545     1
561  Disk_Group_iS  95  84144   80210
561  DISK_GROUP_iS  99  26335   26304
1415    t1_200ea    93  8804    8203
1415    t2_30010k   35  59846   21121
1415    t3_1tb72k   19  184941  36590
1415    t3_3tb72k   86  258635  224328
5018    t1_200ea    98  9905    9802
5018    t2_30015k   89  39987   35986
5018    t2_60015k   67  59984   40700
5018    t3_1tb72k   89  87567   78807
5018    t3_2tb72k   84  94412   79620

我需要将第3列移到右边的末尾。

这是我到目前为止所尝试的:

Sub moveColumn()

With ActiveSheet        
        Excel.Columns(3).Cut
        Excel.Columns(6).PasteSpecial
End With

End Sub

但是这个方法不起作用,因为它得到运行时错误'1004'。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:10)

Pastespecial不适用于Cut。你可以这样做:

Columns(3).Cut Range("F1")
Columns(3).Delete Shift:=xlToLeft 'if you want to delete the empty column

答案 1 :(得分:10)

对于那些想知道的人,可以在不替换目标列的内容的情况下执行此操作。

例如,要剪切B列并将其插入F列的左侧,您可以使用

Columns("B").Cut
Columns("F").Insert Shift:=xlToRight

您还可以使用列索引替换指定的列标题,以便尝试(Columns("B")变为Columns(2)

答案 2 :(得分:6)

给出的其他答案的问题是剪切/粘贴技术使用剪贴板覆盖其中的任何内容,并且如果另一个也使用剪贴板的程序正在运行,则使程序无法正常运行(例如同一个VBA项目的另一个实例)。

相反,这样做:

Application.CutCopyMode = False ' don't want an existing operation to interfere
Columns("F").Insert XlDirection.xlToRight
Columns("F").Value = Columns("B").Value ' this would be one greater if to the right of F
Columns("B").Delete

请注意,如果存在对现有列的引用,它们将会中断并且不会更新。