2016-11-14 19 views
1

我有一個Excel文件,我想刪除無用的列。假設我有4欄:'ID','姓名','姓氏','工作'。我想要做的是刪除所有不是'ID'和'Job'的列。VBA刪除列,其中第一個單元格是一個數組的字符串

我嘗試使用Range.Find方法,但顯然有一些我得到錯誤。

任何幫助表示讚賞

myArray = Array("ID", "Job") 
'Delete columns which title aren't in myArray 
For j = mycol To 1 Step -1 'col by col 
    For k = 0 To 4 'for each element in myArray 
     ' Delete col where no elements of myArray are present. 
     Columns(j).Delete 
    Next k 
Next j 

編輯: 通過列名,我的意思是每列的第一行。所以A1 = ID,B1 =名稱等

+0

你是什麼列名是什麼意思?它只是某個行中單元格中的標題,或者您正在使用Tables(ListObjects)? –

+0

@KazimierzJawor通過列名稱,我的意思是每列的第一行。所以A1 = ID,B1 =姓名等 –

+0

@Daniel Mc檢查下面我的答案中的代碼,讓我知道這是你的意思在你的帖子 –

回答

1

或者你可以用一些輕鬆嘗試:

For j = myCol To 1 Step -1 'col by col 
    'check if column name is in array 
    If IsError(Application.Match(Cells(1, j), myArray, 0)) Then 
     Columns(j).Delete 
    End If 

Next j 
+0

這是一個非常好的方法,不知道它存在! –

+0

@KazimierzJawor這是一個更好,更乾淨的答案 –

0

下面的代碼將遍歷所有列(根據您的mycol值),並檢查第一行中的標頭是否與myArray數組中的任何元素匹配。

Sub DeleteColumns_NotinArray() 

Dim myArray 
Dim j As Long, k As Long, mycol As Long 
Dim ColHeadrFound As Boolean 

myArray = Array("ID", "Job") 

' just for my testing 
mycol = 10 

'Delete columns which title aren't in myArray 
For j = mycol To 1 Step -1 'col by col 

    ' reset flag 
    ColHeadrFound = False 
    For k = 0 To UBound(myArray) 'for each element in myArray 
     If Cells(1, j).Value = myArray(k) Then 
      ColHeadrFound = True 
      Exit For 
     End If 
    Next k 
    ' Delete column where no elements of myArray are present 
    If ColHeadrFound = False Then 
     Columns(j).EntireColumn.Delete 
    End If 

Next j 


End Sub 
相關問題