在Excel Vba中选择最后8行

在Excel Vba中选择最后8行,vba,excel,row,Vba,Excel,Row,我想选择x行数量中的最后8行(数量每月变化),这里已经有一个线程,但只有一列。我需要它的几个列,并尝试了两种不同的方式,但都不工作,由于语法 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" & L

我想选择x行数量中的最后8行(数量每月变化),这里已经有一个线程,但只有一列。我需要它的几个列,并尝试了两种不同的方式,但都不工作,由于语法

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
尝试下面的代码(无需选择工作表进行复制):


当您不确定范围时,即不知道最后一列是什么,请尝试以下操作:)它使用
.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
子样本()
将ws设置为工作表
变暗sRow变长,lRow变长,lCol变长
将LastCol设置为字符串
变暗rng As范围
设置ws=Sheet1'查找最后一列
lCol=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
SearchOrder:=xlByColumns_
搜索方向:=xlPrevious_
MatchCase:=False)。列
“~~>获取最后一列的列字母
LastCol=Split(.Cells(,lCol).Address,“$”(1)
sRow=lRow-7
设置rng=.Range(“A”&sRow&“:”&LastCol&lRow)
调试.打印注册表地址
以
端接头

使用上一个代码,就是这样:

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

A.假设最后一列为“D”?:)B.对于最后8行,您需要使用a
-7
而不是
-8
C.您假设所有列都具有相同的最后一行?++现在更合理:)最后一列将始终为“H”,因为我的宏的其余部分以这种方式格式化数据,但最后一行将始终更改,但是我喜欢学习新东西,所以我也会尝试你的代码。谢谢你的帮助!:)所有列是否都具有相同的lastrow?否,因为例如“A”中包含公式,但不包含进一步操作所需的数据。这就是为什么我使用“D”作为我的参考,因为在“D”列的每个单元格中都有相关数据!
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
Sheets("Sheet2").Select
LastRow = Range("D" & Rows.Count).End(xlUp).Row
Set Last8Rows =  Range("A" & LastRow - 7, "D" & LastRow)
Last8Rows.Copy