如何删除vba中的特定列为excel

时间:2014-10-27 01:51:33

标签: excel vba excel-vba

我正在尝试删除vba中的多个列以获取Excel。我从伊利诺伊州统计分析中心下载有关药物逮捕的数据。 http://www.icjia.org/public/sac/index.cfm?metasection=forms&metapage=rawMetadata&k=170

我要删除的每列都是彼此分开的3列。

例如:

亚当斯县伊利诺伊州尚佩恩县伊利诺伊州 估计|百分比|误差幅度|估算保证金|估计|百分比|误差幅度

d | E | F | G | H | I |Ĵ

我只想删除所有列的误差百分比

这是我的微观:

Sub deleteCol()
Columns("H,J").Delete

 End Sub

我一直得到运行时'13:类型不匹配错误

有什么建议吗?

3 个答案:

答案 0 :(得分:13)

你刚刚错过了列语句的后半部分,告诉它删除整个列,因为大多数正常范围都以列号开头,它正在查找一个数字并且没有得到一个。 ":"获取整列或行。

我认为你在Range中寻找的是:

Range("C:C,F:F,I:I,L:L,O:O,R:R").Delete

只需更改列字母即可满足您的需求。

答案 1 :(得分:5)

您说要删除任何标题为"百分比误差"所以,让我们尝试使这个动态而不是直接命名列。

Sub deleteCol()

On Error Resume Next

Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Dim nLastCol, i As Integer

Set wbCurrent = ActiveWorkbook
Set wsCurrent = wbCurrent.ActiveSheet
'This next variable will get the column number of the very last column that has data in it, so we can use it in a loop later
nLastCol = wsCurrent.Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'This loop will go through each column header and delete the column if the header contains "Percent Margin of Error"
For i = nLastCol To 1 Step -1
    If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare) > 0 Then
        wsCurrent.Columns(i).Delete Shift:=xlShiftToLeft
    End If
Next i

End Sub

只要列标题位于第一行,您就不必担心粘贴/导入数据的位置。

编辑:如果第一行中的标题不是,那将是一个非常简单的更改。在这部分代码中:If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare)更改" 1"在Cells(1, i)中,您的标题所在的行。

编辑2:更改了代码的For部分,以说明完全空列。

答案 2 :(得分:0)

回答问题 如何在Excel中删除VBA中的特定列。 我使用数组如下。

sub del_col()

dim myarray as variant
dim i as integer

myarray = Array(10, 9, 8)'Descending to Ascending
For i = LBound(myarray) To UBound(myarray)
    ActiveSheet.Columns(myarray(i)).EntireColumn.Delete
Next i

end sub