簡體   English   中英

Excel Vba 從 2 個單元格值創建數組,步長為 1

[英]Excel Vba create array from 2 cell values step size of 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 編輯器的立即 window 中:

~~> 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM