我正在循环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
但它给出了错误。
我怎么回事呢?
答案 0 :(得分:4)
你的答案很好,但这是一个有趣的问题。这是预先弄清楚的方法:
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,因为它是最后选择的。
答案 1 :(得分:3)
我喜欢其他一些答案,但最简单的方法可能如下:
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答案(谁是第一个)。
答案 2 :(得分:2)
AFAIK,您可以按索引访问Cell
尝试将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
答案 3 :(得分:2)
我这样做是为了得出结论
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
答案 4 :(得分:1)
要检查2个范围是否相同,您可以使用交叉方法(如果它们不相交,则它们不相同)。
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