Как удалить определенные столбцы в 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
просто измените буквы столбцов в соответствии с вашими потребностями.