Выберите столбцы выбранных ячеек в VBA

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

Код ниже. Я извлек функцию FindAll из http://www.cpearson.com/excel/findall.aspx.

Sub delete_unwanted_columns()

    Dim rng2 As Range
    Set rng2 = FindAll(Range("1:1"), "p-value", xlValues, xlPart)
    Dim rng3 As Range
    Set rng3 = FindAll(Range("1:1"), "type", xlValues, xlPart)

    With ActiveSheet
        Set Rng = Union(rng2, rng3)
    End With

    Rng.Select
'    ActiveSheet.Range(Selection, Selection).EntireColumn.Select
'    Selection.Delete Shift:=Left

End Sub

Это дает мне это:

Когда я раскомментирую предпоследнюю строку, я получаю это:

Я хотел бы, чтобы он выбрал все столбцы, начинающиеся с «значения p» или «типа», но он выбирает только первые 2. Почему это происходит и как это исправить?

rng.entirecolumn.delete Shift:=Left
Scott Craner 16.05.2024 22:03

@ScottCraner Это не сработало для «Аргумент не является обязательным», но я сделал Rng.EntireColumn.Select, а затем Selection.Delete. Спасибо!

imrobert 16.05.2024 23:15
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня есть функция, которая делает нечто подобное, используя цикл Do While, чтобы проверять каждую ячейку, пока она не достигнет пустой ячейки в строке заголовка. Адаптировано для вас, это выглядит так:

Dim currentCol as Integer
With ActiveWorkbook.ActiveSheet
    Do While Not Cells(1, i) = ""
        currentCol = Cells(1, i).Column
        findValue1 = "type"
        findValue2 = "p-value"

        If InStr(1, Left$(Cells(1, i), 4), findValue1) or InStr(1, Left$(Cells(1, i), 7), findValue2) ' Notice the "4" and the "7" used to limit how much of the cell's value to check... don't want it finding "type" or "p-value" anywhere but at the beginning
            Columns(currentCol).Delete
        Else
            i = i + 1 ' You only need to advance one column if you've deleted a column.
        End IF
    Loop
End With

Удаление столбцов диапазона, обозначенных их заголовками

Sub DeleteUnwantedColumns()
    
    Dim Begins() As Variant: Begins = Array("p-value", "type")
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    Dim rg As Range: Set rg = ws.Range("A1").CurrentRegion
    
    Dim frg As Range: Set frg = rg.Rows(1)
    Dim lcell As Range: Set lcell = frg.Cells(frg.Cells.Count)
    
    Dim urg As Range, fcell As Range, Begin As Variant, FirstColumn As Long
    
    For Each Begin In Begins
        Set fcell = frg.Find(Begin & "*", lcell, xlFormulas, xlWhole)
        If Not fcell Is Nothing Then
            FirstColumn = fcell.Column
            Do
                If urg Is Nothing Then
                    Set urg = fcell
                Else
                    Set urg = Union(urg, fcell)
                End If
                Set fcell = frg.FindNext(fcell)
            Loop Until fcell.Column = FirstColumn
        End If
    Next Begin
    
    If urg Is Nothing Then
        MsgBox "Columns had already been deleted!", vbExclamation
    Else
        Intersect(rg, urg.EntireColumn).Delete xlToLeft
        MsgBox "Columns deleted.", vbInformation
    End If

End Sub

Другие вопросы по теме

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

Оператор Excel IF для сравнения двух процентных значений и получения третьего
Размещение случайно сгенерированных чисел в случайные позиции в диапазоне строк
Лента Excel: отключить все настраиваемые вкладки, если лист защищен
VBA Macro генерирует html-файлы с недопустимыми символами
Функция SCAN не отображает шаги, за которыми следует функция REDUCE при расчете
Активируйте несколько листов в файле Excel с помощью OpenPyxl
Получите СУММПРОИЗВ с несколькими критериями столбца и строки, если таблица содержит значения, которые не являются числовыми
Получите СУММПРОИЗВ с несколькими критериями столбца и строки и игнорируйте критерии, если ячейка с критериями пуста
Определить имя столбца/номер столбца сортировки в Excel
Найти значение на листе 1, скопировать значение смещения, найти значение смещения на листе 2, вставить текст в ячейку смещения