在一个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.TransposeEvaluate和工作表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