列VBA中的最后一行

时间:2016-09-13 12:42:36

标签: excel-vba vba excel

我写了一个简短的VBA代码来自动化东西 一个简短的片段如下:

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的范围:$ $ $ 148。如何调整此部件以便自动识别最后一行和/或范围?

我已经尝试过:

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

而不是:

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

提前致谢!

7 个答案:

答案 0 :(得分:2)

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

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

然后你可以做

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

答案 1 :(得分:2)

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

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

表示最后一行和

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

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

答案 2 :(得分:1)

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

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

所以你基本上会像

一样使用它
With m_Sheet
  ' Use this range
  .Range(.UsedRange.Rows.Count, .UsedRange.Columns.Count)
End With

答案 3 :(得分:1)

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

Selection.End(xlDown).Select

答案 4 :(得分:1)

这样可以解决问题:

Dim rSource As Range

With Worksheets("Sheet1")

    Set rSource = .Range("A1", .Columns("A:O").Find(What:="*", After:=.Range("A1"), SearchDirection:=xlPrevious))

End With

答案 5 :(得分:1)

如果您不了解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

答案 6 :(得分:1)

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

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