在Excel Vba中选择最后8行
我想选择x行数量中的最后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
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