我写了一个简短的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")
提前致谢!
答案 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。