excel - Excel VBA:从 UDF 的范围中选择子范围的各种方法
问题描述
我在这个网站上看到了从一个范围中选择一个子范围的各种方法,我正在努力理解这些差异。
对于以下设置:
我有以下代码:
Option Explicit
Function TestX(rg As Range) As Range
Dim subrg1 As Range, subrg2 As Range, subrg3 As Range
Set subrg1 = rg.Parent.Range(rg.Cells(4, 4), rg.Cells(9, 10))
Set subrg2 = Range(Cells(4, 4), Cells(9, 10))
Set subrg3 = rg.Range(Cells(4, 4), Cells(9, 10))
Debug.Print subrg1.Cells(1).Value, subrg1.Count
Debug.Print subrg2.Cells(1).Value, subrg2.Count
Debug.Print subrg3.Cells(1).Value, subrg3.Count
End Function
日志如下:
16 42
1 42
16 42
这三种方式有什么区别?
我只能理解 subrg2
,这似乎是一种直接、绝对的选择范围的方式D4:J9
。
解决方案
定义子范围的几种方法
- 该
getSubRange
功能应该满足您的要求。 - 如果绿色范围的大小可能发生变化,该
getSubRange2
功能会派上用场。
编码
Option Explicit
Sub getSubRangeTEST()
Dim rg As Range: Set rg = Range("B3:K10")
Dim srg As Range: Set srg = getSubRange(rg)
Debug.Print rg.Address, srg.Address
Set srg = getSubRange2(rg)
If Not srg Is Nothing Then
Debug.Print rg.Address, srg.Address
End If
End Sub
Function getSubRange(rg As Range) As Range
Const rRows As Long = 6
Const rCols As Long = 7
Const oRows As Long = 1
Const oCols As Long = 2
If Not rg Is Nothing Then
With rg
Set getSubRange = .Offset(oRows, oCols).Resize(rRows, rCols)
'Set getSubRange = .Offset(1, 2).Resize(6, 7) ' without the constants
'Set getSubRange = .Cells(oRows + 1, oCols + 1).Resize(rRows, rCols)
'Set getSubRange = .Cells(2, 3).Resize(6, 7) ' without the constants
End With
End If
End Function
Function getSubRange2(rg As Range) As Range
Const rRows As Long = 2
Const rCols As Long = 3
Const oRows As Long = 1
Const oCols As Long = 2
If Not rg Is Nothing Then
With rg
On Error Resume Next
Set getSubRange2 = .Resize(.Rows.Count - rRows, _
.Columns.Count - rCols).Offset(oRows, oCols)
'Set getSubRange2 = .Resize(.Rows.Count - 2, _
.Columns.Count - 3).Offset(1, 2) ' without the constants
On Error GoTo 0
End With
End If
End Function
推荐阅读
- python-3.x - 训练了一个模型,但如何手动预测新实例?
- javascript - 如何将多个选择器的 toggleClass 及其各自的类存储在 localStorage 中?
- microsoft-graph-api - 使用 Microsoft Graph 创建指向 OneDrive 文件的永久公共下载链接
- node.js - 处理大型复杂 mongodb 查询的最佳策略
- excel-formula - Excel中的“N”最大值(正或负)列表,以文本字段为条件
- android - LocalBroadcast Receiver Kotlin 收到多条消息
- java - 应用程序适用于wildfly,但不适用于tomcat
- google-cloud-platform - GCE导入自定义windows镜像
- javascript - 如何设计带有子列表的列表,子列表应显示在父列表的悬停上
- css - ExtJs - 在 mixins scss 中覆盖 css