2017-08-04 76 views
0

我試圖在某些VBA代碼中組織我的列。我需要它們,具體取決於行A中的值。我知道我可以用下面的方法做到這一點,但它很長時間的囉嗦,看起來很可怕。有沒有更有效的方法來做到這一點?Excel VBA - 根據名稱移動列而不需要加載變量

目前代碼

Set Name = Cells.Find(What:="Name", LookAt:=xlWhole) 
    Set Title = Cells.Find(What:="Title", LookAt:=xlWhole) 
    Set Description = Cells.Find(What:="Description", LookAt:=xlWhole) 
    Set State = Cells.Find(What:="State", LookAt:=xlWhole) 
    Set Severity = Cells.Find(What:="Severity", LookAt:=xlWhole) 
    Set Risk = Cells.Find(What:="Risk", LookAt:=xlWhole) 
    etc......... 

然後激活細胞,發現列,然後粘貼到我想它。因此,如果列是這樣的:

Level|Name|Line|Champion|Title|Description|State|Severity|Risk 

這將順序改變這一

Name|Title|Description|State|Severity|Risk 

我不能只是刪除我不想,因爲他們改變位置的列。所以如果我想刪除列C:C,它可能會刪除我偶爾需要的東西。

我需要它,以便無論列中有多少列或多少列,它也將按照上面所示的順序排列。

謝謝

+0

是否包含公式?或者只是數據輸入?你想對那些不在你的「新訂單」列表中的公式做什麼?新列表是否應覆蓋舊數據;或者它應該放在不同的紙上? –

+1

自定義排序套裝? – pnuts

+0

沒有公式,它只是原始數據。我不需要的列可以被覆蓋或刪除。我只需要上面列出的具體列,按照特定的順序。自定義排序? – Dullspark

回答

0

試試這個。

Dim Rng As Range 
Set Rng = ActiveSheet.UsedRange 

If Range("A2").Value = "x" Then 
    Range("A1,C1,D1").EntireColumn.Hidden = True 
    Rng.SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Sheet2").Range("A1") 
End If