7

Basically I'm looking to move a column for one position to another.

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

I need to move the 3rd column to the end at the right.

This is what I have tried so far:

Sub moveColumn()

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

End Sub

But this method doesn't work as it gets a runtime error '1004'.

Any help would be much appreciated.

4

3 に答える 3

17

疑問に思っている方のために説明すると、宛先列の内容を置き換えずにこれを行うことができます。

たとえば、列 B を切り取って列 F の左側に挿入するには、次のように使用できます。

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

好みに応じて、名前付きの列ヘッダーを列インデックスに置き換えることもできます (そうColumns("B")なりますColumns(2))

于 2014-05-06T11:39:36.903 に答える
9

Pastespecial は Cut では機能しません。あなたはこれを行うことができます:

Columns(3).Cut Range("F1")
Columns(3).Delete Shift:=xlToLeft 'if you want to delete the empty column
于 2013-10-30T16:50:34.663 に答える
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

既存の列への参照がある場合、それらは壊れて更新されないことに注意してください。

于 2015-11-11T18:19:26.320 に答える