2016-09-13 58 views
1

我寫了一個簡短的VBA代碼來自動化東西。
一小片段如下:最後一列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:$ O $ 148的範圍。我如何調整此部件以便它自動識別最後一行和/或範圍?

我已經嘗試過:

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

相反的:

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

提前感謝!

+2

可能重複[如何查找包含Excel表單中包含宏數據的最後一行?](http://stackoverflow.com/questions/71180/how-can-i-find-last-row-那個包含數據的excel-sheet-with-a-macro) – sous2817

+0

NINJA'd你可能會發現上面提到的頁面很有趣! –

回答

1

這是我做的,我猜這是一個重複的方式,但你可以模仿打從一排End-Up遠遠低於你的使用範圍與

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

那麼你可以做

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

這一個是最簡單的答案,它的工作,謝謝! – Probs

+0

不客氣,我相信有可理解的解決方案是有價值的。在未來的工作中一切順利。 –

+0

是的,有:)謝謝! – Probs

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 
2

一般讓你上次使用的行和列的索引,你可以找到最後行/列,因此,完整的使用範圍使用:

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

在最後一排和

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

爲最後一列。 我建議不要使用UsedRange,因爲如果你有空白,它會導致錯誤。

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 

列是可選的,如果沒有給定值,它是一個。 我的GitHub repository with LastThings is here

相關問題