Vba 选择A列中最后使用的单元格,然后将其扩展到H列
您好,我正在尝试选择一个范围Vba 选择A列中最后使用的单元格,然后将其扩展到H列,vba,excel,Vba,Excel,您好,我正在尝试选择一个范围“A2:H2”,根据列a(因此在这种情况下,它应该选择“A2:H59”)。范围不是固定的,因此不能用精确的数字定义。我有下面的代码,但它选择了第402行的所有内容,即使工作表中除了“A59”之外没有数据。知道发生了什么吗?谢谢你的帮助 Global ssaw As Worksheet Global trckr As Worksheet Sub DataF() Dim myRange As Range Dim myCell As Range Set ssaw
“A2:H2”
,根据列a
(因此在这种情况下,它应该选择“A2:H59”
)。范围不是固定的,因此不能用精确的数字定义。我有下面的代码,但它选择了第402行的所有内容,即使工作表中除了“A59”
之外没有数据。知道发生了什么吗?谢谢你的帮助
Global ssaw As Worksheet
Global trckr As Worksheet
Sub DataF()
Dim myRange As Range
Dim myCell As Range
Set ssaw = Sheets("SSAW_DATA")
Set trckr = Sheets("SQL_DATA_FEED")
Set myRange = trckr.Range("A2:H2").end(xlDown)
With myRange
.SpecialCells(xlCellTypeBlanks).Interior.Color = RGB(255, 102, 102)
.SpecialCells(xlCellTypeBlanks).Value = "#missing#"
End With
End Sub
如果我们假设A列中最后使用的单元格是
A59
,那么
……这
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown))
将选择A2:A59,然后
.Resize(ColumnSize:=8)
将调整其大小,使其具有8列宽度,即A2:H59
因此,我们一起得到:
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown)).Resize(ColumnSize:=8)
用这个
trckr.Range("A" & trckr.Rows.Count).End(xlUp)
或者,如果在A列中有空单元格,则在A列中查找最后使用的单元格:
Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)
如果我们假设A列中最后使用的单元格是
A59
,那么
……这
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown))
将选择A2:A59,然后
.Resize(ColumnSize:=8)
将调整其大小,使其具有8列宽度,即A2:H59
因此,我们一起得到:
Set myRange = trckr.Range("A2", trckr.Range("A2").End(xlDown)).Resize(ColumnSize:=8)
用这个
trckr.Range("A" & trckr.Rows.Count).End(xlUp)
或者,如果在A列中有空单元格,则在A列中查找最后使用的单元格:
Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)
利用
Range(cell1,cell2)
等同于Range(cell2,cell1)
如果要选择从A2:H2到a列最后一个非空单元格的范围(即沿a列在第一个和最后一个非空单元格之间包括空单元格):
利用
Range(cell1,cell2)
等同于Range(cell2,cell1)
如果要选择从A2:H2到a列最后一个非空单元格的范围(即沿a列在第一个和最后一个非空单元格之间包括空单元格):
我建议使用以下代码
Option Explicit
Function LastRowInColumn(colName As String)
Dim lastRow As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
LastRowInColumn = lastRow
End Function
Sub SelectRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
lastRow = LastRowInColumn("A")
Debug.Print lastRow
If lastRow = 1 Then
' do nothing
Else
Set wks = ActiveSheet
With wks
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
rg.Select
End With
End If
End Sub
代码确定A列中最后一个填充行,并根据此信息选择H列的所有内容
编辑功能改进
Function LastRowInColumn(ByVal wks As Worksheet, ByVal colName As String) As Long
With wks
LastRowInColumn = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
End Function
EDIT2如果不想使用额外的功能,可以这样做
Sub SetRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
Set wks = ActiveSheet
With wks
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'lastRow = LastRowInColumn(wks, "A")
If lastRow > 1 Then
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
End If
End With
End Sub
我建议使用以下代码
Option Explicit
Function LastRowInColumn(colName As String)
Dim lastRow As Long
With ActiveSheet
lastRow = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
LastRowInColumn = lastRow
End Function
Sub SelectRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
lastRow = LastRowInColumn("A")
Debug.Print lastRow
If lastRow = 1 Then
' do nothing
Else
Set wks = ActiveSheet
With wks
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
rg.Select
End With
End If
End Sub
代码确定A列中最后一个填充行,并根据此信息选择H列的所有内容
编辑功能改进
Function LastRowInColumn(ByVal wks As Worksheet, ByVal colName As String) As Long
With wks
LastRowInColumn = .Cells(.Rows.Count, colName).End(xlUp).Row
End With
End Function
EDIT2如果不想使用额外的功能,可以这样做
Sub SetRg()
Dim rg As Range
Dim wks As Worksheet
Dim lastRow As Long
Set wks = ActiveSheet
With wks
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
'lastRow = LastRowInColumn(wks, "A")
If lastRow > 1 Then
Set rg = Range(.Cells(2, 1), .Cells(lastRow, "H"))
End If
End With
End Sub
使用
设置LastCellA=trckr.Range(“A”&Rows.Count).End(xlUp)
时会得到什么?请尝试在电子表格中选择A2,然后按Ctrl+ArrowDown。发生了什么事?这些单元格中有一些内容,可能是空格等。选择第一个空行,下至第402行,然后点击键盘上的删除按钮,然后重试。使用Set LastCellA=trckr.Range(“a”&Rows.Count)。End(xlUp)
?尝试在电子表格中选择A2,然后按Ctrl+ArrowDown。发生了什么事?这些单元格中有一些内容,可能是空格,等等。选择第一个空白行,下到第402行,然后点击键盘上的删除按钮,然后重试。是的,这一行效果很好,谢谢:)这里没有奇怪的402行选择!是的,这一个创造了奇迹,谢谢:)这里没有奇怪的402行选择!不错,我真的很喜欢那个。你需要仔细考虑一下,这样使用调整大小
可能会更方便,但这确实得到了我的观点。有趣的方法,仍然试图让我的头围绕着它哈哈。@Rhyfelwr,它可以归结为“一个矩形可以被它的任何两个相反的角识别”很好的一个,我真的很喜欢那个。你需要仔细考虑一下,这样使用调整大小
可能会更方便,但这确实得到了我的观点。有趣的方法,仍然试图让我的头围绕着它哈哈。@Rhyfelwr,它可以归结为“一个矩形可以被它的任何两个相反的角识别”谢谢,你的版本也可以工作,我只是想让它保持简单。你建议20行代码,其中一行就足够解决它了?你真的应该重新考虑这是否是个好主意。你认为你的代码比设置myRange=trckr.range(trckr.range(“A2”).End(xlDown),“H2”)更可读吗?如果“more”与它的长度有关,那么是的。只要几个指针,我认为不需要函数来获取最后一行。它只是一条单行语句,可用于主子
(在本例中为SelectRg
)。更值得关注的是ActiveSheet
的使用。我在这里看到如此多的问题是因为不合格的工作表。使用ActiveSheet
的问题在于它可能是您想要交互的工作表,也可能不是。我建议您对床单进行鉴定。将与
一起使用是一种很好的方法,因为这样就不需要在对象中限定图纸。您可以使用
语句在中直接引用它。希望它能让人感觉到,对吧,我只是太仓促了。我据此编辑了函数谢谢,你的版本也可以,我只是想保持简单。你建议20行代码,其中一行就足够解决它了?你真的应该重新考虑这是否是个好主意。你认为你的代码比设置myRange=trckr.range(trckr.range(“A2”).End(xlDown),“H2”)更可读吗?如果“more”与它的长度有关,那么是的。只要几个指针,我认为不需要函数来获取最后一行。它只是一条单行语句,可用于主子
(在本例中为SelectRg
)。更值得关注的是ActiveSheet
的使用。我在这里看到如此多的问题是因为不合格的工作表。使用ActiveSheet
的问题在于它可能是您想要交互的工作表,也可能不是。我建议您对床单进行鉴定。将与
一起使用是一种很好的方法,因为这样就不需要在对象中限定图纸。您可以在