从Range VBA查找最后一个单元格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Range VBA查找最后一个单元格相关的知识,希望对你有一定的参考价值。

如何从定义的范围中找到最后一个单元格的位置?单元格不必包含任何数据,但必须是最正确的,并且大多数位于特定范围内的单元格中。

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

我希望收到

Cells(i,j)
答案

也许你是在这之后:

'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
另一答案

尝试以下方法

rngOrigin.End(xlDown).End(xlRight)

或者您可以使用CurrentRegion并计算行和列并使用Offset

另一答案

在您的情况下,由于您希望在wksOrigin(定义为工作表)中找到最右侧和最下方的单元格,您可以使用SpecialCells(xlCellTypeLastCell)获取最后一个单元格Row和Column。

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
另一答案

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

intLastRow = rngOrigin.Cells(1, 1).Row + rngOrigin.Rows.Count - 1
intLastCol = rngOrigin.Cells(1, 1).Column + rngOrigin.Columns.Count - 1
另一答案

其他人给出的答案大多有效,但如果该地区是非连续细胞的联合则不行。这是一个适用于单区域和多区域,连续和非连续的版本。

Function LastCellOfRange(rng As Excel.Range) As Excel.Range
  Dim area As Excel.Range
  Dim rowNum As Long
  Dim maxRow As Long
  Dim colNum As Long
  Dim maxCol As Long
  Dim areaIdx As Integer

  Set LastCellOfRange = Nothing

  maxRow = 0
  maxCol = 0
  For areaIdx = 1 To rng.Areas.Count
    Set area = rng.Areas(areaIdx)
    rowNum = area.Cells(area.Cells.Count).row
    If (rowNum > maxRow) Then
      maxRow = rowNum
    End If
    colNum = area.Cells(area.Cells.Count).Column
    If (colNum > maxCol) Then
      maxCol = colNum
    End If
  Next areaIdx

  Set LastCellOfRange = rng.Worksheet.Cells(maxRow, maxCol)
  Set area = Nothing
End Function
另一答案

也许这就是你想要的:

Dim rngLastCell As Range
Set rngLastCell = rngOrigin(rngOrigin.Count)
另一答案

如果您想要定义范围的绝对最后一个单元格,无论它是否有任何内容,这里都是一个简单的解决方案

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

以上是关于从Range VBA查找最后一个单元格的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

应用公式,然后自动填充数据,直到列中的最后一个可见单元格:VBA

VBA怎样取到查找到的单元格位置

excelvba锁定单元格图片不被删除

用于查找空白单元格的 VBA

vba中怎么遍历单元格中所有字符串