Sub Real_LastRow()
Rem ====确定真正的最后一行
Rem ====先用定位的方法找到工作表中的最后一个单元格
Selection.SpecialCells(xlCellTypeLastCell).Select
flag = False
Rem ====向上循环判断是否是空行
Do While flag = False
Rem ====如果是第一行,退出循环,否则后面的Offset语句向上移动时会出错
If ActiveCell.Row = 1 Then
Exit Do
End If
Rem ====判断当前行是不是空行
Selection.End(xlToLeft).Select
temp1 = IsEmpty(ActiveCell.Value)
Selection.End(xlToRight).Select
temp2 = IsEmpty(ActiveCell.Value)
If temp1 = True And temp2 = True Then
Rem ====如果是空行则选择上一行
Selection.Offset(-1, 0).Select
Else
Rem====如果不是空行,说明已经是真正的最后一行,退出循环
flag = True
Exit Do
End If
Loop
Rem====把最后一行的行号赋给一个变量
row_last = ActiveCell.Row
Cells(row_last, 1).Select
End Sub

解决方案 »

  1.   

    Sheets("sheet1").Range("A65536").End(xlUp).Row
      

  2.   

    Sheets("sheet1").Range("A65536").End(xlUp).Row
    不是真正的最后一行
      

  3.   

    原来楼主真的是来较真的,那就这样吧:
    Private Sub CommandButton1_Click()
    temp = 0
    For i = 1 To 256
    a = Sheets("sheet1").Cells(65536, i).End(xlUp).Row
    If a > temp Then temp = a
    Next
    MsgBox temp
    End Sub
      

  4.   

    唉,这些都太麻烦了,写一个我自己用的:n = ActiveSheet.UsedRange.Rows.Count
    a = ActiveSheet.UsedRange.Rows(n).Row这个简单而且保险,前面使用A65536的有可能出问题的
      

  5.   

        a = Sheets("sheet1").Cells(1,1).SpecialCells(xlLastCell).Row
    你试一下吧,我不晓得你是不是这个意思
      

  6.   

    引用 7 楼 bobjones 的回复:
    唉,这些都太麻烦了,写一个我自己用的: n = ActiveSheet.UsedRange.Rows.Count 
    a = ActiveSheet.UsedRange.Rows(n).Row 这个简单而且保险,前面使用A65536的有可能出问题的 
     正解
      

  7.   

    n = ActiveSheet.UsedRange.Rows.Count 
    a = ActiveSheet.UsedRange.Rows(n).Row 得到的不是真正不为空值的一行,楼主的才是正解
    谢谢了
      

  8.   

    版主,抱歉我挖坟了
    不过进行相关搜索时找到
    而且我觉得LZ的代码不能把隐藏行也计算在内
    bobjones的代码短小,但是能将隐藏行也计算在内