我正在尝试删除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:类型不匹配错误
有什么建议吗?
答案 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