Как удалить определенные столбцы в vba для excel

Я пытаюсь удалить несколько столбцов в vba для excel. Я загружаю данные из Центра статистического анализа Иллинойса об аресте наркотиков. http://www.icjia.org/public/sac/index.cfm?metasection=forms&metapage=rawMetadata&k=170

каждый из столбцов, которые я хочу удалить, - это 3 столбца друг от друга.

например:

Адамс Каунти, Штат Иллинойс, Шампейн Округ Иллинойс Оценка / процент | Процент погрешности |разницы| оценка|процентов|процентов погрешность

D|E|F|G|H|I / J

Я просто хочу удалить все столбцы, скажем, процент погрешности

вот мой микро:

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

 End Sub

Я продолжаю получать время выполнения ' 13: введите ошибку несоответствия

какие предложения?

2 ответов


вы говорите, что хотите удалить любой столбец с заголовком "процентная погрешность", поэтому давайте попробуем сделать это динамическим, а не называть столбцы напрямую.

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

С этим вам не нужно будет беспокоиться о том, куда вы вставляете/импортируете данные, пока заголовки столбцов находятся в первой строке.

EDIT: и если ваши заголовки не в первом ряду, это было бы очень простое изменение. В этой части кода: If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare) изменить "1" в Cells(1, i) в какой строке заголовка находятся.

EDIT 2: изменено For раздел кода для учета полностью пустых столбцов.


вам просто не хватало второй половины оператора столбца, чтобы удалить весь столбец, так как большинство нормальных диапазонов начинаются с буквы столбца, он искал число и не получил его. ": "Получает весь столбец или строку.

Я думаю, что то, что вы искали в своем диапазоне, было следующим:

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

просто измените буквы столбцов в соответствии с вашими потребностями.