Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
满足条件时重置循环excel vba_Excel_Vba - Fatal编程技术网

满足条件时重置循环excel vba

满足条件时重置循环excel vba,excel,vba,Excel,Vba,我有一张excel表格。我想在满足条件时重置循环,因为我有两个条件。然而,我想到了在这个解决方案网站的for循环旁边实现步骤。它不起作用,因为它只适用于数字,而不适用于A1。解决这个问题的方法是什么?多谢各位 Sub run() Set MR = Range("A1:Q1") 'Loop through the cell in the first row For Each cell In MR If cell.Value = "First Discovered"

我有一张excel表格。我想在满足条件时重置循环,因为我有两个条件。然而,我想到了在这个解决方案网站的for循环旁边实现步骤。它不起作用,因为它只适用于数字,而不适用于A1。解决这个问题的方法是什么?多谢各位

Sub run()
 Set MR = Range("A1:Q1")
    'Loop through the cell in the first row
    For Each cell In MR
        If cell.Value = "First Discovered" Or cell.Value = "Last Observed" Then cell.EntireColumn.Delete
    Next cell
End Sub

如果要查看第一行的列
A:Q
,则不需要重置循环。关键是避免在循环内删除,因为这会在循环范围内产生移位

下面的解决方案将在您的范围内循环,并将目标单元格添加到
联合体
(单元格集合),循环完成后,它将删除联合体中所有单元格的列


而且 添加显式
选项
。您需要声明变量,
Option Explicit
将强制您这样做。这也间接地充当了一个方便的拼写检查器

最后一件事:我将变量“
cell
”更改为“
myCell
”,以避免与已经存在的对象
Cells
混淆



我认为解决方案是只在满足条件时重置循环。我应该扩展我的思路去寻找其他的解决方案。谢谢你的伟大解决方案。
Option Explicit

Sub run()

Dim MR As Range, myCell As Range, DeleteMe As Range

Set MR = Range("A1:Q1")

For Each myCell In MR
    If myCell = "First Discovered" Or myCell = "Last Observed" Then
        If DeleteMe Is Nothing Then
            Set DeleteMe = myCell
        Else
            Set DeleteMe = Union(DeleteMe, myCell)
        End If
    End If
Next myCell

If Not DeleteMe Is Nothing Then DeleteMe.EntireColumn.Delete

End Sub