我可以使用变量来定义范围(" X:X")格式中的范围

时间:2015-02-26 16:57:46

标签: excel-vba excel-2010 vba excel

我目前有一个检查的公式:

If Intersect(Target, Range("J:L")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

我需要L作为变量,范围的第二部分基本上是J +偏移。我在这里使用L并且它有效但我需要它是动态的,这就是为什么我想用变量替换L。

我确实搜索了答案,但我发现的唯一的答案是使用范围格式而不是列格式的单元格引用。

2 个答案:

答案 0 :(得分:1)

从外观上看,您在VBA函数中使用它,而不是单元格公式。在这种情况下,您可以构建一个字符串,该字符串是范围的地址。上面的代码变为:

Dim sRangeAddress as String
'Set the Address here
sRangeAddress = "J:L"
If Intersect(Target, Range(sRangeAddress)) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

编辑添加: 要计算范围的结束字母,您可以创建一个公式来执行此操作:

Dim sRangeAddress as String
Dim iAdditionalColumns as int
dim iManyAdditonalColumns as Int
iAdditionalColumns = 1
sRangeAddress = "J:"
'Set the Address here
'Put conditional for going past Column Z
If (iAdditionalColumns + 74) > 90 Then
    iManyAdditonalColumns  = (iAdditionalColumns - 16) / 26
    iAdditionalColumns  = (iAdditionalColumns - 16) Mod 26
    sRangeAddress = sRangeAddress  + Chr(64 + iManyAdditonalColumns) 
End If  
sRangeAddress = sRangeAddress  + Chr(64 + iAdditionalColumns) 

If Intersect(Target, Range(sRangeAddress)) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

如果您需要将列数计算为动态,则必须编写代码以确定列数...

答案 1 :(得分:0)

如果您想从列 J 中定义一个变量偏移量的范围,请考虑:

Sub dural()
    '
    '   N will be the number of extra columns
    '   so if N=0 we want Range("J:J")
    '   and if N=1 we want Range("J:K")
    '   etc.
    '

    Dim N As Long
    N = 3
    Set r = Range("J:" & Chr(N + 74))
    MsgBox r.Address
End Sub

修改#1:

如果您需要访问 Z 列以外的列,请改用:

Sub dural2_TheSequel()
    '
    '   N will be the number of extra columns
    '   so if N=0 we want Range("J:J")
    '   and if N=1 we want Range("J:K")
    '   etc.
    '

    Dim N As Long
    N = 3
    Ch = Replace(Cells(1, N + 10).Address(0, 0), "1", "")
    Set r = Range("J:" & Ch)
    MsgBox r.Address
End Sub