gpt4 book ai didi

vba - 根据条件删除特定列

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

我目前正在尝试编写一个程序,该程序接受用户输入并将值存储在名为 FastenerNumbers 的数组中。根据这些值,程序会用绿色填充特定单元格,以便用户知道在其中输入值。问题是,如果数组中的值为 0,我想删除该列,以便工作表更干净。

我遇到的问题是,当在 for 循环期间删除列时,单元格会向左移动。因此,一些单元格基本上被跳过。为了解决这个问题,我基本上不得不强制程序,以便它循环几次以解决任何跳过的列。

代码如下:

'Make cells green for user to put inputs into
For i = 0 To UBound(FastenerNumbers)
If FastenerNumbers(i) <> 0 Then
With Range(Range("A14").Offset(0, 2 * i), Range("A14").Offset(FastenerNumbers(i) - 1, (2 * i) + 1))
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 4
End With
End If
Next

'Define initial counter variable
j = 1

' Do Until j = 5
' For i = 0 To UBound(FastenerNumbers)
' If FastenerNumbers(i) = 0 Then
' Range(Range("A14").Offset(0, 2 * i), Range("A14").Offset(FastenerNumbers(i) - 1, (2 * i) + 1)).EntireColumn.Delete
' End If
' Next
' Loop
'

Do
For Each cell In Range("A14", Range("A14").Offset(, (UBound(FastenerNumbers) + 1) * 2))
If cell.Interior.ColorIndex <> 4 Then
cell.EntireColumn.Delete
End If
j = j + 1
If j >= (5 * (UBound(FastenerNumbers) + 1) * 2) Then
Exit Do
End If
Next
Loop

伪代码是我要使用的另一种方法。我不认为这两种方法明显优于另一种方法。我希望循环更干净、更高效。

最佳答案

它就像使用一个单独的变量 (j) 来计算有效 FastenerNumbers() 值的数量一样简单,如下所示

'Make cells green for user to put inputs into
For i = 0 To UBound(FastenerNumbers)
If FastenerNumbers(i) <> 0 Then
With Range(Range("A14").Offset(0, 2 * j), Range("A14").Offset(FastenerNumbers(i) - 1, (2 * j) + 1)) ' use j as the column relevant variable
.Borders.LineStyle = xlContinuous
.Interior.ColorIndex = 4
End With
j = j + 1 'update column relevant variable
End If
Next

关于vba - 根据条件删除特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801376/

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