【发布时间】:2013-02-15 00:42:07
【问题描述】:
如果我有一个开始的循环:
For each c in Range("A1:C8")
占位符c (c.count, c.value, c.something,...) 是否有一个属性来标识循环到目前为止的迭代次数?我宁愿使用这样的东西,也不愿包含另一个变量。
【问题讨论】:
-
不。你得自己数。
标签: vba excel foreach iteration
如果我有一个开始的循环:
For each c in Range("A1:C8")
占位符c (c.count, c.value, c.something,...) 是否有一个属性来标识循环到目前为止的迭代次数?我宁愿使用这样的东西,也不愿包含另一个变量。
【问题讨论】:
标签: vba excel foreach iteration
您可以执行以下操作,而不是使用“for each c in range”:
Dim c as Long 'presumably you did this as a Range, just change it to Long.
Dim myRange as Range 'Use a range variable which will be easier to call on later
Set myRange = Range("A1:C8")
For c = 1 to myRange.Cells.Count
'Do something to the cell, identify it as myRange.Cells(c), for example:
myRange.Cells(c).Font.Bold = True '<--- replace with your code that affects the cell
Next
这允许您执行完全相同的 For/Next 循环,而无需包含不必要的计数器变量。在这种情况下,c 是一个计数器,但也用于识别受代码影响的单元格。
【讨论】:
For Each c In Range语法,你可以在循环内使用c.Font.Bold = True,所以不需要Long变量...
Long 变量。
For Each c ... 中每次迭代的结果 c 不与myRange.Cells(c) 相同吗?因此,对于 OP 的查询,有一种方法可以在没有“额外”计数器变量的情况下做他想做的事。它可能不适用于所有方面,但根据我的经验,它适用于范围内的单元格、特殊单元格、数组中的项目、系列中的点、图表中的系列、表单上的控件、表格上的形状等——你能举一些例子吗?在这种方法不起作用的情况下,OP 可以确定解决他的问题的最佳方法是什么?
c 中有引用时,使用索引加粗)。
你需要自己这样算
Dim i as integer
i = 0
For each c in Range("A1:C8")
i = i + 1
或者
Dim i as integer
Dim c as Range
For i = 0 to Range("A1:C8").Count - 1
Set c = Range("A1:C8").Cells(i)
【讨论】:
c 的尺寸为长/整数,您就可以引用Range("A1:C8").Cells(c) 之类的单元格范围。
(修订)
根据您正在迭代的方向,使用 Column 或 Row 属性,您可以即时计算序数。因此
For Each c1 in myRange
myOrdinal = c1.row - myRange.row + 1 ' down contiguous cells in one column
myOrdinal = c1.Column - myRange.Column + 1 ' contiguous columns, L2R
Next
【讨论】: