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

时间:2016-12-28 13:55:17

标签: vba range cell

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

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

我希望收到

Cells(i,j)

8 个答案:

答案 0 :(得分:1)

也许你在此之后:

'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

答案 1 :(得分:0)

尝试以下

rngOrigin.End(xlDown).End(xlRight)

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

答案 2 :(得分:0)

在您的情况下,由于您希望在wksOrigin(定义为工作表)中找到最右侧和最下方的单元格,您可以使用SpecialCells(xlCellTypeLastCell)获取最后一个单元格Row and 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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

其他人给出的答案大多有效,但如果该区域是不连续单元的并集则无效。这是一个可以在单个和多个区域(连续和不连续)区域中一致使用的版本。

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

答案 5 :(得分:0)

也许这就是您想要的:

Server

答案 6 :(得分:0)

使用此代码查找给定范围内的最后一个单元格

Sub GetLastCellFromRange()
    Dim rng As Range

    Set rng = Range("$C$10:$E$20")

    'Set rng = Range(Selection.Address) ' Use this line to select the range in worksheet

    MsgBox "Last Cell of given range is : " & rng.Cells(rng.Rows.Count, rng.Columns.Count).Address
End Sub

我希望它将对您有帮助

答案 7 :(得分:-1)

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

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