2016-08-01 136 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