Excel VBA сканирование столбца от z до столбца, удалить, если заголовок столбца не совпадает с набором значений удалить столбец - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь отсканировать столбцы от Z до A, если заголовок столбца (в строке 2) не соответствует заданному списку значений, а затем удалить столбец или диапазон («Z2: Z», last_row и т. Д. И т. Д.),

вот мой код (раздел столбца, который я нашел в Интернете, но он не работает)

Application.ScreenUpdating = False
Application.DisplayAlerts = False

WBPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")

'scan for the line to delete row 2 , row 3, row 4 depending
For i = 6 To 2 Step -1
    If Range("A" & i) = "" Then
        Rows(i).Select
            Selection.Delete Shift:=xlUp
                End If
                    Next i

'scan columns for matching names
    Dim ws As Worksheet
    Dim j As Long
    Dim delRange As Range

    '~~> Set this to the relevant worksheet
    Set ws = ActiveSheet

    With ws
        '~~> Loop through relevant columns
        For j = 26 To 1 Step -1
            '~~> Check if the value is equal to YY
            If Worksheets(ws).Cells(2, j).Value <> "Name" Or "F/N" Or "Ref Des" Or "Component Location" Or "Qty" Then
                Columns(i).Select
            Selection.Delete Shift:=xlLeft
            End If
        Next j
    End With

Ошибка в этой строке с несоответствием типа 13

If Worksheets(ws).Cells(2, j).Value <> "Name" Or "F/N" Or "Ref Des" Or "Component Location" Or "Qty" Then

Я думаю, что мой код для строк намного чище, есть ли аналогичный метод для столбцов или лучший метод для сканирования и уничтожения столбцов?

1 Ответ

1 голос
/ 04 апреля 2019

То, как вы пытаетесь использовать оператор ИЛИ , неверно.

ИЛИ - означает, что должно выполняться только одно условие.

И - означает, что оба условия обязательны.

Попробуй это ...


 '~~> Set this to the relevant worksheet
    Set ws = ActiveSheet
    With ws
        '~~> Loop through relevant columns
        For j = 26 To 1 Step -1
            '~~> Check if the value is equal to YY
            If .Cells(2, j) <> "Name" And .Cells(2, j) <> "F/N" And .Cells(2, j) <> "Ref Des" And .Cells(2, j) <> "Component Location" And .Cells(2, j) <> "Qty" Then
                Columns(j).Select
            Selection.Delete Shift:=xlLeft
            End If
        Next j
    End With


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...