我在MyRange
范围内循环。我需要找出是否Cell
是MyRange
.
For Each Cell In MyRange.Cells
If Cell = ' What should I write here?
'Do some stuff
End If
Next Cell
我试过这个:
If Cell = MyRange.Cells(0, MyRange.Count) Then
但它给出了错误。
我该怎么办?
您的答案很好,但这是一个有趣的问题。这是一种预先弄清楚的方法:
Sub test()
Dim MyRange As Excel.Range
Dim cell As Excel.Range
Dim LastCell As Excel.Range
Set MyRange = Selection
Set LastCell = MyRange.Areas(MyRange.Areas.Count).Cells(MyRange.Areas(MyRange.Areas.Count).Cells.Count)
For Each cell In MyRange
If cell.Address = LastCell.Address Then
MsgBox cell.Address
Exit For
End If
Next cell
End Sub
请注意,在我们的两种方法中,如果有多个区域,“最后一个单元格”可能不是最底部或最右侧的单元格。例如选择单元格 J10:J20 然后 E5:E10 并运行上面的。结果将是 E10,因为它是最后选择的。
我喜欢其他一些答案,但最短的方法可能如下:
If Cell.Address = myRange.Cells(myRange.Cells.Count).Address Then
重要说明如果myRange
是连续的单元格范围,则上述解决方案将起作用。
如果您的区域不连续,请使用@Doug Glancy 的逻辑,该逻辑可以如下所示:
If Cell.Address = myRange.Areas(myRange.Areas.Count).Cells(myRange.Areas(myRange.Areas.Count).Cells.Count).Address Then
请!如果有人想奖励这个答案,请自动使用@Doug Glancy 回答(谁是第一个)。
AFAIK,您可以按索引访问单元格。
尝试替换For Each loop
为for loop
.
我认为这样的事情应该有效(未经测试):
Dim rng As Integer = myrange.Cells.Count
For i As Integer = 0 To rng - 1
'...do something
If i = rng Then
End If
Next
我这样做是为了得出结论
Dim i As Integer: i = 1
For Each Cell In MyRange.Cells
If i = MyRange.Cells.Count Then
'Do if stuff using Cell
Else
'Do else stuff using Cell
End If
i = i + 1
Next Cell
要检查 2 个范围是否相同,您可以使用intersect 方法(如果它们不相交,则它们不一样)。
Sub lastCellInForEach()
Dim cell As Range, myrange As Range
Set myrange = ActiveSheet.Range("A1:C1000")
For Each cell In myrange.Cells
'using Intersect to check if cell is the last cell in the range
If Not Intersect(cell, myrange(myrange.cells.count)) Is Nothing Then
debug.print cell.address
End If
Next cell
End Sub