我写了一个简短的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")
提前致谢!
这是我这样做的方式,我猜这是重复的,但你可以模仿从远低于你的使用范围的行中击中End-Up
finalRow = Range("A65000").End(xlup).Row
那么你可以做到
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$O$" & finalRow & ""), , xlYes).Name = _
"Table2"
通常,您可以使用以下命令查找最后一行/列,从而找到完整的使用范围:
ActiveWorkbook.Worksheets("NAME").Range("A" & Rows.Count).End(xlUp).row
最后一行和
ActiveWorkbook.Worksheets("NAME").Cells(1, Columns.Count).End(xlToLeft).Column
为最后一列。我建议不要使用UsedRange
,因为如果你之间有空白,它将导致错误。
您可以使用工作表对象的UsedRange
属性。您可以使用上次使用的行和列的索引
ActiveSheet.UsedRange.Columns.Count
ActiveSheet.UsedRange.Rows.Count
所以你基本上会喜欢这个
With m_Sheet
' Use this range
.Range(.UsedRange.Rows.Count, .UsedRange.Columns.Count)
End With
我使用了快捷方式Ctrl+Arrow Down
,导致跟随VBA(录制宏之后):
Selection.End(xlDown).Select
这样就可以了:
Dim rSource As Range
With Worksheets("Sheet1")
Set rSource = .Range("A1", .Columns("A:O").Find(What:="*", After:=.Range("A1"), SearchDirection:=xlPrevious))
End With
如果你不太了解像我这样的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
这是我找到最后一行的方式:
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。