我可以使用变量以 Range("X:X") 格式定义范围吗
Can I use a variable to define a Range in the Range("X:X") format
我目前有一个公式可以检查:
If Intersect(Target, Range("J:L")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
我需要 L 是一个变量,范围的第二部分本质上是 J+ 一个偏移量。我在这里使用了 L 并且它可以工作,但是我需要它是动态的,这就是为什么我想用变量替换 L 的原因。
我确实搜索了答案,但我能找到的唯一答案是使用范围格式而不是列格式的单元格引用。
从外观上看,您是在 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
如果您需要动态的列数,则必须编写代码来确定列数...
如果你想定义一个范围,它是来自列 J 的变量 offset 然后考虑:
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
我目前有一个公式可以检查:
If Intersect(Target, Range("J:L")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
我需要 L 是一个变量,范围的第二部分本质上是 J+ 一个偏移量。我在这里使用了 L 并且它可以工作,但是我需要它是动态的,这就是为什么我想用变量替换 L 的原因。
我确实搜索了答案,但我能找到的唯一答案是使用范围格式而不是列格式的单元格引用。
从外观上看,您是在 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
如果您需要动态的列数,则必须编写代码来确定列数...
如果你想定义一个范围,它是来自列 J 的变量 offset 然后考虑:
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