2 个阵列以特定方式增加

  • 本文关键字:方式 增加 阵列 vba
  • 更新时间 :
  • 英文 :


我需要两个 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

最新更新