gpt4 book ai didi

vba - 如果单元格包含 VBA/Excel 中的特定值,如何从范围中删除列

转载 作者:行者123 更新时间:2023-12-03 02:50:15 29 4
gpt4 key购买 nike

我正在尝试编写一些 VBA,它将检查一系列列(行 M 到 GD)中单元格的值,如果单元格不包含“YY”,则删除该列。

要检查的单元格始终位于第 22 行

我尝试了以下方法,但速度非常慢。

w = 186
Do
If Worksheets(“SOF”).Cells(22, w).Formula = "YY" Then
w = w - 1
Else
Worksheets(“SOF”).Cells(22, w).EntireColumn.Delete
End If
w = w - 1
Loop Until w < 13

有人对如何加快速度或解决此问题的更好方法有任何建议吗?

谢谢

最佳答案

Does anyone have any suggestions on how to speed this up or a better way to do this problem?

是的,有。 不要删除循环中的列。使用Union方法。这是一个例子。我已经对代码进行了注释,因此您在理解它时不会遇到问题。不过,如果您这样做,只需发回即可。

Option Explicit

Sub Sample()
Dim ws As Worksheet
Dim i As Long
Dim delRange As Range

'~~> Set this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("SOF")

With ws
'~~> Loop through relevant columns
For i = 13 To 186
'~~> Check if the value is equal to YY
If UCase(Trim(.Cells(22, i).Value)) = "YY" Then
'~~> Store the Range to delete later
If delRange Is Nothing Then
Set delRange = .Columns(i)
Else
Set delRange = Union(delRange, .Columns(i))
End If
End If
Next i
End With

'~~> Delete the relevant columns in one go
If Not delRange Is Nothing Then delRange.Delete
End Sub

这将在眨眼间执行,但如果您愿意,您可以将代码夹在 Application.ScreenUpdating = False 之间。和Application.ScreenUpdating = True

关于vba - 如果单元格包含 VBA/Excel 中的特定值,如何从范围中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21413167/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com