【发布时间】:2018-12-08 03:16:21
【问题描述】:
我有一张包含数据的表格。我想根据行值删除列。
我的代码没有停止,当我点击转义时,它已经从我的起始列中删除了所有列。
我想检查第 2 行中从 D 列到最后使用的列(我现在大约有 100 列)中的值,如果它们包含 C15、C17 等,则不要执行任何操作,否则,删除这些列。
我只有 40k 行。我的范围、列和行每周都会扩展,所以我想使用 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
【问题讨论】:
-
1. 您的问题中有一个额外的
With ws。 2. 您从未真正使用过With ws- 在Cells、Columns.Count和Columns前面应该有句点。 3. 从最右边的列开始向左移动:For i = LR1 to 4 Step - 1。 4。Cells(2, i),不是Cells(2 & i)。 -
谢谢我试图修复它,我已经发布了修改后的代码,但现在我的代码什么也不做,这意味着在我点击运行宏后,什么也没有发生
-
在
Cells前面添加一个句点 - 两次 - 和Columns- 一次。 -
你也错过了第 4 点。
-
你还有一个错字——你的循环中有
LR,但上面有LR1。