2016-08-01 132 views
2

我想選擇x行的最後8行(每個月的數量更改),這裏有一個線程已經在這裏,但只有一列。我需要它爲幾列,並嘗試了兩種不同的方式,但都不符合語法。在Excel中選擇最後8行Vba

Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8aRows = Range("B" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8bRows = Range("C" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8cRows = Range("D" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8dRows = Range("E" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8eRows = Range("F" & LastRow).Offset(-7, 0).Resize(8, 1) 
Set Last8fRows = Range("G" & LastRow).Offset(-7, 0).Resize(8, 1) 
LastxRows = Last8Rows + Last8aRows + Last8bRows + Last8cRows + Last8dRows + Last8eRows + Last8fRows 
LastxRows.Copy 

我的第二次嘗試

Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A:D" & LastRow).Offset(-7, 0).Resize(8, 1) 
Last8Rows.Copy 

回答

5

嘗試下面的代碼(有沒有必要Select片,以複製):

Option Explicit 

Sub Copy_LastEight_Rows() 

Dim Sht2   As Worksheet 
Dim LastRow   As Long 
Dim Last8Rows  As Range 

Set Sht2 = ThisWorkbook.Sheets("Sheet2") 

LastRow = Sht2.Range("D" & Sht2.Rows.Count).End(xlUp).Row 

' modify Column D to your need 
Set Last8Rows = Sht2.Range("A" & LastRow - 7 & ":D" & LastRow) 
Last8Rows.Copy 

End Sub 
+2

答:您假設最後一列將是 「d」? :) B.對於最後8行,你需要一個'-7'而不是'-8'C.你假設所有的列都有相同的最後一行? –

+0

你是對的,應該是-7 –

+2

++現在它更有意義:) –

4

當你不知道的你的範圍,即你不知道你最後一列是什麼,然後嘗試這:)它使用.Find找到最後一行和最後一列。

Sub Sample() 
    Dim ws As Worksheet 
    Dim sRow As Long, lRow As Long, lCol As Long 
    Dim LastCol As String 
    Dim rng As Range 

    Set ws = Sheet1 '<~~ Change as applicable 

    With ws 
     '~~> Find last row 
     lRow = .Cells.Find(What:="*", _ 
       After:=.Range("A1"), _ 
       Lookat:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByRows, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Row 

     '~~> Find last column 
     lCol = .Cells.Find(What:="*", _ 
       After:=.Range("A1"), _ 
       Lookat:=xlPart, _ 
       LookIn:=xlFormulas, _ 
       SearchOrder:=xlByColumns, _ 
       SearchDirection:=xlPrevious, _ 
       MatchCase:=False).Column 

     '~~> Get column letter of last column 
     LastCol = Split(.Cells(, lCol).Address, "$")(1) 
     sRow = lRow - 7 

     Set rng = .Range("A" & sRow & ":" & LastCol & lRow) 

     Debug.Print rng.Address 
    End With 
End Sub 
+0

最後一列將始終爲「H」,因爲我的宏的其餘部分以這種方式格式化數據,但最後一行將始終爲Change,但我喜歡學習新東西,所以我會嘗試你的代碼,也感謝你的幫助! :) –

+0

所有的列都有相同的拉斯特羅? –

+0

不,因爲「A」例如有公式,但沒有進一步操作所需的數據。這就是爲什麼我使用「D」作爲參考,因爲在列「D」的每個單元格中都是相關的數據! –

1

使用你最後的代碼,這是它:

Option Explicit 

Sub Main() 

    Call SelectLastRows 

End Sub 

Sub SelectLastRows(Optional str_start As String = "A", _ 
        Optional str_end As String = "D") 

    Dim l_last_row As Long 
    Dim last_8_rows As Range 


    l_last_row = Range(str_start & Rows.Count).End(xlUp).Row 
    Set last_8_rows = Range(str_start & l_last_row & ":" & str_end & l_last_row).Offset(-7, 0).Resize(8, 1) 
    last_8_rows.Copy 

End Sub 
2
Sheets("Sheet2").Select 
LastRow = Range("D" & Rows.Count).End(xlUp).Row 
Set Last8Rows = Range("A" & LastRow - 7, "D" & LastRow) 
Last8Rows.Copy