【问题标题】:Last row in column VBAVBA 列中的最后一行
【发布时间】:2023-03-20 11:38:01
【问题描述】:

我编写了一个简短的 VBA 代码来实现自动化。
一个简短的sn-p如下:

Sub TEST()

    Rows("1:2").Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$O$148"), , xlYes).Name = _
        "Table2"

End Sub

但是,每个 Excel 文件的行数都不同。现在,当我录制这个宏时,它只需要 $A$1:$O$148 的范围。如何调整这部分以使其自动识别最后一行和/或范围?

我已经试过了:

.Range("A1").SpecialCells(xlCellTypeLastCell).Row

代替:

Range("$A$1:$O$148")

提前致谢!

【问题讨论】:

标签: excel vba


【解决方案1】:

通常,您可以通过以下方式找到最后一行/列,从而找到完整的使用范围:

ActiveWorkbook.Worksheets("NAME").Range("A" & Rows.Count).End(xlUp).row

对于最后一行和

ActiveWorkbook.Worksheets("NAME").Cells(1, Columns.Count).End(xlToLeft).Column

最后一列。 我建议不要使用UsedRange,因为如果中间有空格,会导致错误。

【讨论】:

    【解决方案2】:

    我就是这样做的,我猜这是重复的,但你可以模仿从远低于你使用范围的行中点击End-Up

    finalRow = Range("A65000").End(xlup).Row
    

    那你就可以了

    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$O$" & finalRow & ""), , xlYes).Name = _
        "Table2"
    

    【讨论】:

    • 这是最容易理解的答案,而且很有效,谢谢!
    • 不客气,我相信可理解的解决方案是有价值的。祝你未来的工作一切顺利。
    • 是的,有:) 谢谢!
    【解决方案3】:

    您可以使用工作表对象的UsedRange 属性。 您可以使用

    获取上次使用的行和列的索引
    ActiveSheet.UsedRange.Columns.Count
    ActiveSheet.UsedRange.Rows.Count
    

    所以你基本上会像这样使用它

    With m_Sheet
      ' Use this range
      .Range(.UsedRange.Rows.Count, .UsedRange.Columns.Count)
    End With
    

    【讨论】:

      【解决方案4】:

      我使用了快捷方式Ctrl+Arrow Down,这导致了以下VBA(在录制宏之后):

      Selection.End(xlDown).Select
      

      【讨论】:

        【解决方案5】:

        这样就可以了:

        Dim rSource As Range
        
        With Worksheets("Sheet1")
        
            Set rSource = .Range("A1", .Columns("A:O").Find(What:="*", After:=.Range("A1"), SearchDirection:=xlPrevious))
        
        End With
        

        【讨论】:

          【解决方案6】:

          如果您像我一样不太了解 vba 库或语法,这将有所帮助。

          Dim lastline as long
          Dim lastColumnline as long
          dim usedcells as long
          dim i as long
          dim YOURCOLUMN as long
          dim count as long
          
          Set ws = Worksheet("blablabla")
          lastline = ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
          usedcells = Application.WorksheetFunction.CountA(ws.Columns(YOURCOLUMN))
          for i = 1 to lastline
           if ws.cells(i,YOURCOLUMN) <> vbnullstring then
            count = count + 1
               if count = usedcells then
                  lastColumnline  = i
                  'i is the lastColumnline 
               end if
           end if
          next i
          

          【讨论】:

            【解决方案7】:

            这是我找到最后一行的方式:

            Function lastRow(Optional strSheet As String, Optional column_to_check As Long = 1) As Long
            
                Dim shSheet As Worksheet
            
                If strSheet = vbNullString Then
                    Set shSheet = ActiveSheet
                Else
                    Set shSheet = Worksheets(strSheet)
                End If
            
                lastRow = shSheet.Cells(shSheet.Rows.Count, column_to_check).End(xlUp).Row
            
            End Function
            

            该列是可选的,如果没有给出值,它是列A。 我的GitHub repository with LastThings is here

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-10-28
              • 2013-04-27
              • 2022-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多