选择A列中最后使用的单元格,然后将其扩展到H列

问题描述 投票:1回答:3

您好我在那里尝试选择范围"A2:H2"到最后填充单元格基于column 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
excel vba excel-vba
3个回答
2
投票

如果我们假设您在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列中最后使用的单元格:

Set myRange = trckr.Range("A2", trckr.Range("A" & trckr.Rows.Count).End(xlUp)).Resize(ColumnSize:=8)

2
投票

利用Range(cell1, cell2)相当于Range(cell2, cell1)的事实

Set myRange = trckr.Range("H2", trckr.Range("A2").End(xlDown))

而如果你想选择一个范围从A2:H2到A列最后一个非空单元格(即在第一个和最后一个非空单元格之间沿着A列包含空单元格):

Set myRange = trckr.Range("H2", trckr.Cells(trckr.Rows.Count, 1).End(xlUp))

1
投票

我建议使用以下代码

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
© www.soinside.com 2019 - 2024. All rights reserved.