Выбор нескольких заголовков столбцов и затем удаление этих столбцов - PullRequest
0 голосов
/ 25 мая 2019

ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ ЛЮБЫЕ ОШИБКИ ЗА НЕ СЛЕДУЮЩИЙ ФОРМАТ ПОСТАВКИ.Это мой первый пост

У меня есть заголовки в row 1.Я хочу выбрать несколько заголовков столбцов, а затем удалить эти столбцы.Я также хочу, чтобы код не прерывался, если определенный указанный заголовок не существует (то есть, если заголовок, который он ищет, не существует, цикл продолжается).

У меня есть код, который работаетнайти указанный заголовок и удалить этот столбец.Однако я не хочу делать этот код для каждого удаляемого заголовка (примерно 20 заголовков).Я также не знаю, как сделать так, чтобы он не ломался, если заголовок не существует.Это будет то, что я делаю ежемесячно, и, скорее всего, все заголовки всегда будут одинаковыми, но я не могу этого гарантировать.Я скачал файл .cs v и работаю с ним.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * В моем коде MsgBox взят из примера, который я нашел в Интернете.Я на самом деле не хочу окно сообщения, если оно не находит заголовок.Я просто хочу пропустить заголовок, который не нашел, и продолжить поиск других.

Find a column header and delete that column
    Dim rngHeadings As Range
    Set rngHeadings = Range("A1", Range("A1").End(xlToRight)).Find("Category")
        If rngHeadings Is Nothing Then
            MsgBox "Can't find that"
            Exit Sub
        End If
        rngHeadings.EntireColumn.Select
        Selection.Delete

Так что "Category" является одним из заголовков.Некоторые другие - «AirDur», «RefNbr» и т. Д. (Я могу заполнить остальные).

Ответы [ 2 ]

2 голосов
/ 25 мая 2019
Dim rngHeadings As Range, f As Range
Set rngHeadings = ActiveSheet.Rows(1)

For Each h in Array("Category","AirDur")
    Set f = rngHeadings.Find(What:=h, lookat:=xlWhole)
    If Not f Is Nothing Then f.EntireColumn.delete
Next h
1 голос
/ 25 мая 2019

Вот моя попытка ответить на этот вопрос, см. Подробности в комментариях.

Sub delColumns()

Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet 'better use Thisworkbook.Sheets("SheetName") / or ActiveWorkbook / or specific workbook
Dim lCol As Long: lCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column 'Get the last column
Dim R As Long, C As Long

Dim arrHeadingsToDelete() As String
arrHeadingsToDelete = Split("Category,AirDur,RefNbr", ",")              'Add more as needed

For C = lCol To 1 Step -1                                               'Loop from last column to first
    For R = LBound(arrHeadingsToDelete) To UBound(arrHeadingsToDelete)  'Loop through each of the headings in the above array
        If ws.Cells(1, C) = arrHeadingsToDelete(R) Then                 'If there is a match
            ws.Cells(1, C).EntireColumn.Delete                          'Delete the column...
            Exit For                                                    '...and move to check the next one
        End If
    Next R
Next C

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