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()
属性,我使用命名范围的 3rd
和 200th
行来设置范围以查找空白单元格。
我们的想法是,如果您的命名范围不仅仅是一整列,这将对您有所帮助。它将从您的命名范围中获取相对的第 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。
我有一个命名范围 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()
属性,我使用命名范围的 3rd
和 200th
行来设置范围以查找空白单元格。
我们的想法是,如果您的命名范围不仅仅是一整列,这将对您有所帮助。它将从您的命名范围中获取相对的第 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。