从地址和偏移量字符串设置Excel范围

时间:2019-04-12 20:59:49

标签: excel vba

我想从两个字符串变量中设置一个范围变量;范围地址和偏移量

例如,以下代码将Ran设置为R4C6

Dim Str1 As String, Str2 As String, Ran As Range

Str1 = "R1C2"
Str2 = "(3,4)"

Set Ran = Evaluate(Str1).Offset(MID(Str2, 2, 1), MID(Str2, 4, 1))

Debug.Print Ran.Address(, , xlR1C1)

是否可以直接从字符串执行此操作,而不是像我的示例那样将偏移字符串转换为行和列组件?

我尝试了各种语法,例如

Set Ran = Evaluate(Str1 & ".Offset" & Str2)

但找不到任何有效的方法

1 个答案:

答案 0 :(得分:1)

您必须以某种方式提取数字。 如果您使用字符串作为Range对象的参数,则该字符串必须为A1样式。而且,当然,如果使用Cells对象,则可以使用数字(用于行或列)或字符串(用于A1样式)作为列名。

这是另一种使用正则表达式提取数值的方法,但是有很多方法可以做到这一点:

显式选项

Sub due()
    Dim Str1 As String, Str2 As String, Ran As Range
    Dim RE As Object, MC As Object

Str1 = "R1C2"
Str2 = "(3,4)"

Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .Pattern = "\d+"
    Set MC = .Execute(Str1)
        Set Ran = Cells(MC(0), MC(1))
    Set MC = .Execute(Str2)
        Set Ran = Ran.Offset(MC(0), MC(1))
End With

Debug.Print Ran.Address(ReferenceStyle:=xlR1C1)

End Sub