2015-09-24 34 views
0

我使用宏來快速搜索大型學生數據表並將其整合到單個單元格中以用於座位計劃(我是一名教師)。大部分工作,但我選擇只需要我需要的數據有問題。根據名稱刪除列表(第一個值)

步驟:
1.刪除數據。
2.運行一個公式來檢查學生是否適合特定的人羣和鞏固他們的信息
3.格式

不同的主題和年組對他們的數據不同的佈局,因此這一步是造成我的問題。我試過在步驟2中使用絕對單元格引用,但這不起作用,因爲有時D列中的信息在列E等。

我希望能夠做的是有一個宏檢查列中的第一個值(即標題),如果它與預定列表中的某一個不匹配,則刪除整個列及其數據。

Dim rng As Range 
For Each rng In Range("everything") 

If rng.Value = "Test" Or rng.Value = "Test1" Then 
    rng.EntireColumn.Hidden = True 
End If 

我想我可以使用這樣的,如果我可以在輸出中隱藏列以刪除這些變化?

+0

請施加任何前閱讀標籤使用指南。 – pnuts

+0

能否請您展示一些示例數據以及您希望它看起來如何。謝謝 – Mukul215

+0

請閱讀如何問一個[mcve] –

回答

0

回覆:我想要做的是有一個宏檢查列中的第一個值(即標題),如果它與預定列表中的某一個不匹配,則刪除整列與它的數據。

要刪除所有列不在名單:

Sub del_cols() 
    Dim c As Long, vCOL_LBLs As Variant 

    vCOL_LBLs = Array("BCD", "CDE", "DEF") 

    With Worksheets("Sheet7")  '<~~ set this worksheet reference properly! 
     For c = .Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 
      If IsError(Application.Match(.Cells(1, c), vCOL_LBLs, 0)) Then 
       .Columns(c).Delete 
      End If 
     Next c 
    End With 
End Sub 

要刪除所有列WITHIN名單:

Sub del_cols() 
    Dim v As Long, vCOL_LBLs As Variant 

    vCOL_LBLs = Array("BCD", "CDE", "DEF") 

    With Worksheets("Sheet7")  '<~~ set this worksheet reference properly! 
     For v = LBound(vCOL_LBLs) To UBound(vCOL_LBLs) 
      Do While Not IsError(Application.Match(vCOL_LBLs(v), .Rows(1), 0)) 
       .Cells(1, Application.Match(vCOL_LBLs(v), .Rows(1), 0)).EntireColumn.Delete 
      Loop 
     Next v 
    End With 
End Sub 
+0

這很棒,它可以做我想做的事情,只不過它刪除了我在「數組」部分聲明的單元格,是否有一些小的我會改變,這樣我就可以將我輸入的值留下而不是刪除?謝謝! –

+0

我的歉意;顯然我扭轉了你的原始狀況。請參閱上面的更正。 – Jeeped

+0

你幾乎可以節省數百個工時。謝謝。 –