![](/img/trans.png)
[英]Excel VBA - Paste values from array based on cell values on the sheet
[英]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.