2016-11-14 74 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 
相关问题