2013-10-30 52 views
4

基本上我正在尋求將一個位置的列移動到另一個位置。Excel宏移動列

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 

我需要將第三列移到右邊的末尾。

這是我到目前爲止已經試過:

Sub moveColumn() 

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

End Sub 

但是,因爲它得到一個運行時錯誤「1004」這個方法不起作用。

任何幫助將不勝感激。

+0

詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:堆棧溢出問題清單 – ApplePie

+0

我已經給出了我嘗試過的代碼,期望它從coulmn 3/C中刪除數據並將其粘貼到第6欄的第6列中。這不起作用,因爲我在pastespecial行'1004'上遇到了運行時錯誤。 – DarylF

回答

9

Pastespecial不適用於Cut。您可以這樣做:

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

工作完美!謝謝 – DarylF

7

對於那些想知道的情況,可以在不替換目標列的內容的情況下執行此操作。

例如,削減B列,把它插入到列F中的左邊,你可以使用

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

您還可以列索引更換指定的列標題,品嚐(所以Columns("B")變得Columns(2)

5

與其他答案給出的問題是,剪切/粘貼技術使用剪貼板覆蓋任何內容,並使程序無法正常運行,如果另一個程序也使用剪貼板正在運行(如同一個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 

只要注意,如果有現有的列引用,他們將打破,並不會被更新。