试图循环范围内的非连续行

我正在尝试写一些将循环访问表中一系列不连续的行,并更改每行中的列数据…例如ClearContents。 范围将是dynamic的,我想要循环的行将全部被“选中”。

我尝试了以下,但在第一行之后停止。 我很确定问题在于下一行与第一行不连续:

For Each b In a.Rows mainTasks.DataBodyRange(Range("mainTasks[Status]").Column).ClearContents Next b 

然后,我有一个聪明的想法,写一些只适用于“选定”列单元格的东西。 我尝试使用If ... .Value = Selected ,并没有工作。

我是否想要做一些Excel 2016 VBA无法做到的事情? 也就是说,循环通过一个范围内的不连续的行? 我一直在研究,并尝试了其他一些不起作用的东西。 你能告诉我,如果我走错了兔子洞?

我试图简化你的代码在评论中的testing目的,但下面的代码应该有所帮助,

 Dim x As Integer Dim myrange As Range For x = 1 To 30 If (mainTasks.Cells(x, 2) = "completed" Or mainTasks.Cells(x, 2) = "Dismissed") And mainTasks.Cells(x, 3) <> "" Then If myrange Is Nothing Then Set myrange = mainTasks.Cells(x, 2) Else Set myrange = Union(myrange, mainTasks.Cells(x, 2)) End If End If Next x myrange.ClearContents 

我试了一下,它工作正常给我的方式设置。 希望能帮助到你!

你还必须添加代码来复制数据,我正在清除这个内容,因为这是你的原始问题

你的循环中没有任何variables。

它只会在循环中重复清除一列。 您需要以某种方式引用循环中的b,以在每个循环中获得不同的结果。

这也是(我认为)

 Dim selectedRange As Range Set selectedRange = Application.Selection For Each Row In selectedRange.Rows Debug.Print Row.Address Next Row