将1维数组写入单个列时出现错误

Sub Lottery() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim N As Long Dim xLot() As String N = 0 ReDim xLot(1 To 169911) For A = 1 To 27 For B = A + 1 To 28 For C = B + 1 To 29 For D = C + 1 To 30 For E = D + 1 To 31 N = N + 1 xLot(N) = A & "-" & B & "-" & C & "-" & D & "-" & E 'Debug.Print xLot(N), N 'Range("a" & N).Value = xLot(N) Next E Next D Next C Next B Next A Range("A1:A169911").Resize(169911, 1).Value = Application.WorksheetFunction.Transpose(xLot) End Sub 

使用转置运行时错误13types不匹配。 我在另一个博客上读到,我不能写超过65535个单元格。 在另一个例子中,在第38840到169911行(组合的数目)之后,单元具有#N / A。 我已经在立即窗口和arrays帐户中运行它的所有组合。 任何帮助将不胜感激。

您不能使用转置函数的值超过65535,因为转置将一个范围的列转换成一个范围的行(反之亦然),并且在Excel工作表中只能有65535列。 您可以通过给数组赋予第二个维来绕过转置函数,所以将redim语句更改为:

 ReDim xLot(1 To 169911,0) 

和你的任务说明:

 xLot(N,0) = A & "-" & B & "-" & C & "-" & D & "-" & E 

…最后你的范围声明:

 Range("A1:A169911").Resize(169911, 1).Value = xLot 

编辑:只是testing它,这个代码为我工作:

 Sub Lottery() Dim A As Long Dim B As Long Dim C As Long Dim D As Long Dim E As Long Dim N As Long Dim xLot() As String N = 0 ReDim xLot(1 To 169911, 0) For A = 1 To 27 For B = A + 1 To 28 For C = B + 1 To 29 For D = C + 1 To 30 For E = D + 1 To 31 N = N + 1 xLot(N, 0) = A & "-" & B & "-" & C & "-" & D & "-" & E 'Debug.Print xLot(N), N 'Range("a" & N).Value = xLot(N) Next E Next D Next C Next B Next A Range("A1:A169911").Resize(169911, 1).Value = xLot End Sub 

移调的上限约为65k项。

如果你反而

 ReDim xLot(1 To 169911, 1 to 1) '.... xLot(N, 1) = A & "-" & B & "-" & C & "-" & D & "-" & E '... 

那么你将不需要移调:

 Range("A1:A169911").Value = xLot