从范围VBA中查找最后一个单元格

问题描述:

如何从定义的范围中查找最后一个单元格的位置?单元格不必包含任何数据,但必须是来自某个范围的最右边和最下方的单元格。从范围VBA中查找最后一个单元格

Set rngOrigin = wksOrigin.Cells(IntFirstRow, IntFirstColumn).CurrentRegion 

我希望收到

Cells(i,j) 
+0

这可能为一个简单的情况下工作http://www.cpearson.com/excel/cells.htm与设置myrange =范围(“A1:A10”),并使用该链接重新索引一个范围的情况下,并使用myrange.Rows.Count – barlop

尝试以下

rngOrigin.End(xlDown).End(xlRight) 

,或者您可以使用CurrentRegion和计数的行和列,并使用Offset

你的情况,因为你想在012中找到最右边和最下面的单元格(定义为工作表),您可以使用SpecialCells(xlCellTypeLastCell)来获取最后一个单元行和列。

i = wksOrigin.Cells.SpecialCells(xlCellTypeLastCell).Row ' <-- get last row number 
j = wksOrigin.Cells.SpecialCells(xlCellTypeLastCell).Column ' <-- get last column number 

如果你要调试的结果,你可以添加:

MsgBox "Last row at " & i & ", last column at " & j 
+1

我想找到当前区域的Range的最后一个单元格,而不是整个Worksheet。如果工作表包含超出当前区域的数据,我不想包含它们。 – Fajka

+0

你定义的范围是什么? –

也许你是在此之后:

'absolute indexes from cell A1 
With rngOrigin 
    i = .Rows(.Rows.count).row 
    j = .Columns(.Columns.count).Column 
End With 

'relative indexes from rngOrigin upleftmost cell 
With rngOrigin 
    i = .Rows(.Rows.count).row - .Rows(1).row + 1 
    j = .Columns(.Columns.count).Column - .Columns(1).Column + 1 
End With 

我处理它在下面的代码,但你的言论很有帮助。谢谢。

intLastRow = rngOrigin.Cells(1, 1).Row + rngOrigin.Rows.Count - 1 
intLastCol = rngOrigin.Cells(1, 1).Column + rngOrigin.Columns.Count - 1 
+0

那么你应该采用我的“绝对”代码,并避免重复'rngOrigin'并使用(对我来说)更适当的范围规格 – user3598756

如果你想有一个定义范围的绝对值最后一个单元格,不管它是否有任何内容,这里有一个简单的解决方案

Dim InputRng As Range 'define a range for the test' 
Set InputRng = Range("$F$3:$F$15") 
MsgBox InputRng(1).Address & ":" & InputRng(InputRng.Cells.Count).Address 'This would output the absolute address of defined range' 

enter image description here

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的基本部分,提供链接供参考。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18793890) – Dez

+0

@Dez:谢谢你的提示,我会在有空的时候这样做。 –

+0

@我已经回复了德兹,当我有时间时,我会做。我正在使用执行类似功能的Excel中的UDF,并且先检查了堆栈,但找不到任何有用的答案。最终我从我的答案中链接了另一个网站的解决方案。我已经测试过它,它工作得很好。 –