簡體   English   中英

根據行值刪除列

[英]Delete column based on row value

我有一張包含數據的表。 我想基於行值刪除列。

我的代碼沒有停止,當我點擊逃逸時,它已從我的起始列中刪除了所有列。

我想檢查從列D到最后使用的列(現在我有大約100列)的第2行中的值,如果它們包含C15,C17等,則不執行任何操作,否則,請刪除這些列。

我只有4萬行。 我的范圍,列和行每周都會擴展,因此我想使用VBA減少格式化時間。

Sub test()
'start
Dim LR1 As Long
Dim i As Long
Set ws = ThisWorkbook.ActiveSheet

With ws
    LR1 = .Cells(2, .Columns.Count).End(xlToLeft).Column   
    Dim arr As Variant
    Dim x
    arr = Array("C15", "C17", "C19", "C20", "C21", "C22", "C23", "C24", "C25", "C28", "C29", "C30", "C32")

    For x = LBound(arr) To UBound(arr)
        For i = LR1 To 4 Step -1
            If .Cells(2, i).Value = arr(x) Then
            Else
                .Columns(i).Delete
            End If
        Next i
    Next x
End With
End Sub

除了注釋中的所有要點外,主要問題是循環邏輯已關閉。 您的外循環應該是列,而內循環應該是數組。 但是使用Select Case可以將其簡化為一個循環。

也許是這樣的:

Option Explicit

Sub Test()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.ActiveSheet

    With ws
        Dim lastCol As Long, i As Long
        Dim rng As Range

        lastCol = .Cells(2, .Columns.Count).End(xlToLeft).Column

        For i = lastCol To 4 Step -1
            Select Case .Cells(2, i).Value
                Case "C15", "C17", "C19", "C20", "C21", "C22", "C23", "C24", "C25", "C28", "C29", "C30", "C32"
                    ' keep
                Case Else
                    If rng Is Nothing Then
                        Set rng = .Columns(i)
                    Else
                        Set rng = Union(rng, .Columns(i))
                    End If
            End Select
        Next i

        If Not rng Is Nothing Then
            rng.Delete
        End If
    End With
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM