Как я могу удалить столбцы без определенных заголовков?

Политики могут быть запущены во всех приложениях.

Запустите сейчас скриншот, который вы это продемонстрировали.

2
задан Pᴇʜ 21 January 2019 в 07:46
поделиться

1 ответ

Ваша проблема

Проблема, с которой вы сталкиваетесь, связана с тем, что вы удаляете столбцы внутри своего диапазона цикла. Когда вы удаляете столбец, диапазон, который вы циклически изменяете, приводит к пропуску столбцов (в соответствии с вашими результатами). Чтобы бороться с этим, вы можете использовать метод Union, который позволяет удалять столбцы вне цикла, чтобы вы не столкнулись с сообщенной проблемой. В нижнем решении показано, как исправить сообщенную проблему, если вы решили удалить столбцы внутри цикла.


Выберите вариант

Select Case. Прокрутите диапазон и, если ячейка отсутствует в списке в первом случае, она будет помечена для удаления во втором случае (Case Else).

После того, как вы зациклили свои заголовки, удалите все столбцы сразу, что означает, что во время зацикливания смещения диапазона не будет.

Sub DeleteColumns()

Dim iCell As Range, DeleteMe As Range

For Each iCell In Range("A1:W1")
    Select Case iCell
        Case "Cartons", "ShipVia", "Name", "Address", "City", "State", "Zip"
            'Do Nothing
        Case Else
            If Not DeleteMe Is Nothing Then
                Set DeleteMe = Union(DeleteMe, iCell)
            Else
                Set DeleteMe = iCell
            End If
    End Select
Next iCell

If Not DeleteMe Is Nothing Then DeleteMe.EntireColumn.Delete

End Sub

Array

Вы также можете перебирать массив. Обратите внимание, что цикл столбца движется в обратном направлении, чтобы остановить смещение соответствующего диапазона внутри цикла (ваша первоначальная проблема). Для этого вам нужно сбросить цикл For Each и переключиться на For j = # - #, чтобы вы могли использовать свойство Step -1

Sub Array_Method()

Dim Arr: Arr = Array("Cartons", "ShipVia", "Name", "Address", "City", "State", "Zip")
Dim i As Long, j As Long

For j = 23 To 1 Step -1
    For i = UBound(Arr) To LBound(Arr)
        If Arr(i) = Cells(1, j) Then
            Cells(1, j).EntireColumn.Delete
        End If
    Next i
Next j

End Sub
0
ответ дан urdearboy 21 January 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: