如何解决Excel Vba 从 2 个单元格值创建数组,步长为 1
我正在尝试创建一个基于 2 个单元格值更改大小的数组。 然后这个数组将在 For 循环中使用。
例如:
B3 = 1 C3 = 4
我希望数组的下限为 1,上限为 4,步长或间隔为 1
当我像下面这样键入数组时,代码可以工作,但我希望它是动态的,或者根据单元格值 B3 和 C3 进行更改。
SheetList = Array("1","2","3","4")
解决方法
只需使用 for 循环:
Sub workForFree()
Dim sheetlist() As Variant
ReDim sheetlist(ActiveSheet.Range("C3") - ActiveSheet.Range("B3"))
Dim k As Long
k = 0
Dim i As Long
For i = ActiveSheet.Range("B3") To ActiveSheet.Range("C3") Step 1
sheetlist(k) = i
k = k + 1
Next i
Debug.Print Join(sheetlist,",")
End Sub
,
如果您处理版本 MS 365,您可以使用新的 Sequence()
function(默认情况下将从 1 开始):
Sub CreateSequence365()
Dim lo As Long: lo = ActiveSheet.Range("B3") ' start of sequence
Dim hi As Long: hi = ActiveSheet.Range("C3") ' end of sequence
'create sequence via single code line
Dim sheetlist: sheetlist = Application.Sequence(1,hi - lo + 1,lo,1)
'display results in VB Editor's immediate window
Debug.Print "~~> " & Join(sheetlist,"),_
vbNewLine & "Boundaries: " & LBound(sheetlist) & " To " & UBound(sheetlist)
End Sub
在 VB 编辑器的即时窗口中的结果:
~~> 1,2,3,4
Boundaries: 1 To 4
编辑 #1:其他版本的替代方法:
Sub CreateSequence()
Dim lo As Long: lo = ActiveSheet.Range("B3")
Dim hi As Long: hi = ActiveSheet.Range("C3")
Dim sheetlist: sheetlist = Application.Transpose(Evaluate("row(" & lo & ":" & hi & ")"))
Debug.Print "~~> " & Join(sheetlist,_
vbNewLine & "Boundaries: " & LBound(sheetlist) & " To " & UBound(sheetlist)
End Sub
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。