在一个variables中存储一个范围
我需要把一个variables的范围,即variables
tsPeriod(1) = (3, 4, 5) tsPeriod(3) = (1, 2, 3).
我不知道要声明什么样的variables,以及如何去做。 我试图做这样的事情:
Dim tsPeriod() as long ReDim tsPeriod(nSub) as long for i = 1 to nSub tsPeriod(i) = (tsStart(i), tsEnd(i)) next
但是这种方式并不奏效,我也不知道如何把这个“范围”放到这个variables中。 (如果第一个值是3,第二个是6我想variables检索(3,4,5,6))
以下是代码的一部分:
Dim wb As Workbook Set wb = ThisWorkbook Dim subjects As Worksheet Set subjects = wb.Sheets("Subject") Dim nSub As Integer, nRooms As Integer nSub= subjects.Cells(Rows.Count, 1).End(xlUp).value Dim tsStart() As Long ReDim tsStart(nSub) As Long For i = 1 To nSub tsStart(i) = subjects.Cells(i + 1, 3).value Next Dim tsBusy() As Long ReDim tsBusy(numDis) As Long For i = 1 To nSub tsBusy(i) = subjects.Cells(i + 1, 4).value Next Dim tsEnd() As Long ReDim tsEnd(nSub) As Long For i = 1 To nSub tsEnd(i) = tsStart(i) + tsBusy(i) - 1 Next 'Here's where im having trouble Dim tsPeriod() As Long ReDim tsPeriod(nSub) As Long For i = 1 To nSub tsPeriod(i) = (tsStart(i), TsEnd(i)) Next
在VBA中没有内置的“范围”方法:您需要维度所需大小的数组,并使用循环来填充它。 你可以创build一个函数来做到这一点:
Function RRange(startNum, endNum) Dim rv() as long, i Redim rv(1 to (endnum-startnum)+1) for i = startNum to endNum rv((i-startNum)+1) = i next i RRange = rv End Function
然后:
For i = 1 To numDis tsPeriod(i) = RRange(tsStart(i), TsEnd(i)) Next
您可以使用Application.Transpose
, Evaluate
和工作表ROW
函数的组合来到达那里。
为了
tsPeriod(i) = (tsStart(i), TsEnd(i))
简单地使用
tsPeriod(i) = Application.Transpose(Evaluate("=ROW(" & tsStart(i) & ":" & tsEnd(i) & ")"))
从第一个值到最后一个值得到一个数组。 为了得到一个逗号分隔的string,把它放在这样的Join
tsPeriod(i) = Join(Application.Transpose(Evaluate("=ROW(" & tsStart(i) & ":" & tsEnd(i) & ")")), ",")
Join
也是很好的testing,如果一切正常,因为你可以使用Debug.Print
。