列VBA中的最后一行

问题描述 投票:1回答:7

我写了一个简短的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")

提前致谢!

excel-vba vba excel
7个回答
2
投票

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

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

那么你可以做到

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

2
投票

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

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

最后一行和

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

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


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

1
投票

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

Selection.End(xlDown).Select

1
投票

这样就可以了:

Dim rSource As Range

With Worksheets("Sheet1")

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

End With

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

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

© www.soinside.com 2019 - 2024. All rights reserved.