VBA中如何获取InputBox选中Range区域的各行列参数变量
VBA获取选中Range区域四角坐标的最简方法
无需解析Range.Address字符串,直接调用Range对象的原生属性即可快速获取对应坐标,不需要写任何分支判断逻辑。
修正后的完整代码
Sub RangeSelectionPrompt() Dim rng As Range Dim a As Long, b As Long, e As Long, f As Long ' 异常处理:避免用户点击取消时报错 On Error Resume Next Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) On Error GoTo 0 ' 用户取消选择直接退出 If rng Is Nothing Then Exit Sub ' 直接读取属性获取坐标,无需解析地址 b = rng.Row ' 左上角行号 a = rng.Column ' 左上角列号(数值格式) f = rng.Row + rng.Rows.Count - 1 ' 右下角行号 e = rng.Column + rng.Columns.Count - 1 ' 右下角列号(数值格式) ' 输出结果 MsgBox "选中区域地址:" & rng.Address & vbCrLf & _ "a(左上角列号):" & a & vbCrLf & _ "b(左上角行号):" & b & vbCrLf & _ "e(右下角列号):" & e & vbCrLf & _ "f(右下角行号):" & f End Sub
补充说明
- 如果需要获取列的字母标识(比如地址
$P$11:$T$15里的P、T),可以用以下自定义函数转换列号:
Function ConvertToLetter(colNum As Long) As String ConvertToLetter = Split(Cells(1, colNum).Address, "$")(1) End Function
调用ConvertToLetter(a)即可得到左上角列的字母标识,调用ConvertToLetter(e)即可得到右下角列的字母标识。
- 上述代码默认处理连续选区场景,如果用户可能选择不连续的多区域,需要遍历
rng.Areas集合获取每一个子区域的坐标。
内容的提问来源于stack exchange,提问作者mokko kolo
相关产品推荐
相关产品推荐

