[英]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.