VBA Excel select 命名范围内的一系列单元格

VBA Excel select a range of cells within a named range

我有一个命名范围 col_9395 它是一整列。我想在此命名范围内设置一个范围。我希望范围从同一列的第 3 行到第 200 行开始。最好的方法是什么?

没有命名范围的原始工作线:

Set rngBlnk = Sheet108.Range("T3:T200").SpecialCells(xlCellTypeBlanks)

这是我试过但没有成功的代码:

Set rngBlnk = Range("col_9395)(3,1):Range("col_9395)(200,1).SpecialCells (xlCellTypeBlanks)

你可以看到这样的逻辑

Option Explicit

Sub test()

Dim colToUse As Long
colToUse = ThisWorkbook.Worksheets("Sheet1").Range("ol_9395").Column

With ThisWorkbook.Worksheets("Sheet1")
Debug.Print .Range(.Cells(3, colToUse), .Cells(200, colToUse)).Address
End With

End Sub
Sub t()
Dim rng As Range
Set rng = Range("col_9395") ' for easier use

Dim blnkRng As Range
Set blnkRng = Range(Cells(rng.Rows(3).Row, rng.Column), Cells(rng.Rows(200).Row, rng.Column)).SpecialCells(xlCellTypeBlanks)
blnkRng.Select
End Sub

我所做的是将您的命名范围分配给一个变量(只是为了便于引用)。然后使用 Range() 属性,我使用命名范围的 3rd200th 行来设置范围以查找空白单元格。

我们的想法是,如果您的命名范围不仅仅是一整列,这将对您有所帮助。它将从您的命名范围中获取相对的第 3 行和第 200 行。

Option Explicit

Public Sub TestMe()

    Dim rngBlnk As Range

    Dim firstCell As Range
    Dim lastCell As Range

    Set firstCell = [col_9395].Cells(3, 1)
    Set lastCell = [col_9395].Cells(200, 1)

    If WorksheetFunction.CountBlank(Range(firstCell, lastCell)) > 0 Then
        Set rngBlnk = Range(firstCell, lastCell).SpecialCells(xlCellTypeBlanks)
    End If   

End Sub

SpecialCells 和分配给它们的一个问题是,如果没有来自特定类型的单元格,它会抛出错误。

因此,在将rngBlnk设置为特殊单元格之前,WorksheetFunction.CountBlank()>0进行了检查。

可能是错误的,但我发现这是最简单的:

Private Sub Test()
    Dim rngBlnk As Range
    Set rngBlnk = Range("col_9395").Rows("3:200").SpecialCells(xlCellTypeBlanks)
End Sub

我知道我迟到了,但也许这会对某人有所帮助。我偶然发现了一种技术,在此处的少数 "range-in-a-range" 个问题中,我没有将其视为一种选择。

我发现您可以直接向 VBA 询问范围的范围。我已将一些数据格式化为 Table,但它可能只是一个命名范围,甚至是我想的未命名范围。我的工作代码如下所示:

        With Workbooks(Filename)
            .Worksheets(tabName).Activate
            .Worksheets(tabName).Range("SummaryBand").Range("B2:R2").Copy
            End With

我的 Table 被命名为 SummaryBand,由于前面的步骤不一定总是在电子表格中相同的绝对位置,但我想要 SummaryBand 中的绝对范围。在此示例中,"B2:R2" 是 Table 中的绝对位置,Table 的左上角单元格为 A1。