我需要两个 VBA 语言的数组 thay 将创建以下值
1 2
1 3
1 4
2 3
2 4
3 4
因此,当第二个数组中达到 4 时,数组 1 的下一个元素是它原来的元素加上 1,数组 2 的下一个元素是数组 1 + 1 的下一个元素。我尝试过直到循环,但我得到了无限的计算。
我尝试了以下内容,但我得到了无限的计算
暗淡的变体 ENumber = 工作表("Inter")。范围("B1")
Dim FirstLoop As Boolean
Dim m As Variant
ReDim IndexofE1(ENumber * (ENumber - 1) / 2) As Variant
ReDim IndexofE2(ENumber * (ENumber - 1) / 2) As Variant
IndexofE1(0) = 1
FirstLoop = True
Do Until IndexofE1(ENumber * (ENumber - 1) / 2) = Enumber - 1
If IndexofEl2(m) <> ENumber Then
If FirstLoop = False Then
IndexofE1(m + 1) = IndexofE1(m)
IndexofE2(m + 1) = IndexofE1(m) + 1
End If
If FirstLoop = True Then IndexofE2(m + 1) = IndexofE1(m) + 1
Else
IndexofE1(m + 1) = IndexofE1(m) + 1
IndexofE2(m + 1) = IndexofE1(m + 1) + 1
End If
FirstLoop = False
Loop
这将可以做到。 我制作了一个二维数组而不是 2 个一维数组。
Sub khkljhlkjh()
Dim ENumber As Variant
ENumber = Worksheets("Inter").Range("B1")
Dim IndexofE1
Dim i&, j&
Dim m As Long
ReDim IndexofE1(1 To ENumber * (ENumber - 1) / 2, 1 To 2) As Variant
m = 1
For i = 1 To ENumber - 1
For j = i + 1 To ENumber
IndexofE1(m, 1) = i
IndexofE1(m, 2) = j
m = m + 1g
Next j
Next i
End Sub
如果需要这两个数组:
Sub khkljhlkjh()
Dim ENumber As Variant
ENumber = Worksheets("Inter").Range("B1")
Dim IndexofE1
Dim IndexofE2
Dim i&, j&
Dim m As Long
ReDim IndexofE1(1 To ENumber * (ENumber - 1) / 2) As Variant
ReDim IndexofE2(1 To ENumber * (ENumber - 1) / 2) As Variant
m = 1
For i = 1 To ENumber - 1
For j = i + 1 To ENumber
IndexofE1(m) = i
IndexofE2(m) = j
m = m + 1
Next j
Next i
End Sub
现在,这些都不会对数组执行任何操作,因为您的代码段没有显示您要对它们执行的操作。 您需要将数组输出到某些内容,以便可以看到值。
怎么样
Dim int1 As Integer, int2 As Integer, intMax As Integer, intRes() As Integer, intIndex As Integer
intMax = 4
ReDim intRes(1 To intMax * (intMax - 1) / 2, 1 To 2)
Do
int1 = int1 + 1
If int1 = intMax Then
Exit Do
End If
For int2 = int1 + 1 To intMax
intIndex = intIndex + 1
intRes(intIndex, 1) = int1
intRes(intIndex, 2) = int2
Next
Loop
两个提案
一)这将输出两个带有您显示的数字的数组,尽管未使用最后一个数组位置
Option Explicit
Sub main()
Dim ENumber As Long, currVal1 As Long, i As Long, index As Long
Dim array1 As Variant, array2 As Variant
ENumber = Worksheets("Inter").Range("B1")
ReDim IndexofE1(ENumber * (ENumber - 1) / 2) As Variant
ReDim IndexofE2(ENumber * (ENumber - 1) / 2) As Variant
currVal1 = 1
index = 0
Do While currVal1 <= ENumber - 1
For i = currVal1 + 1 To ENumber
IndexofE1(index) = currVal1
IndexofE2(index) = i
index = index + 1
Next i
currVal1 = currVal1 + 1
Loop
End Sub
b)这将输出两个没有调光问题的变体阵列
Option Explicit
Sub main2()
Dim ENumber As Long
Dim array1 As Variant, array2 As Variant
ENumber = Worksheets("Inter").Range("B1")
getArrays ENumber, array1, array2
End Sub
Sub getArrays(ENumber As Long, array1 As Variant, array2 As Variant)
Dim currVal1 As Long, i As Long
Dim strng1 As String, strng2 As String
currVal1 = 1
Do While currVal1 <= ENumber - 1
For i = currVal1 + 1 To ENumber
strng1 = strng1 & currVal1 & " "
strng2 = strng2 & i & " "
Next i
currVal1 = currVal1 + 1
Loop
array1 = Split(Left(strng1, Len(strng1) - 1))
array2 = Split(Left(strng2, Len(strng2) - 1))
End Sub