我目前有一个检查的公式:
If Intersect(Target, Range("J:L")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
我需要L作为变量,范围的第二部分基本上是J +偏移。我在这里使用L并且它有效但我需要它是动态的,这就是为什么我想用变量替换L。
我确实搜索了答案,但我发现的唯一的答案是使用范围格式而不是列格式的单元格引用。
答案 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