VBA - Поместить диапазон значений в массив - PullRequest
0 голосов
/ 02 июля 2018

Я довольно новый программист-самоучка, и я надеюсь учиться у всех вас.

Здесь я хотел бы поместить столбцы A Excel в массив и сформировать комбинацию из трех столбцов. Код написан и работает, однако, с очень низкой скоростью.

  1. Если я поставлю Array (1,2,3 ..., 9,10), это сработает. Однако, если я определю Dim nums (): nums = Array (Range ("A1: A5"). Value) не работает.

  2. Даже если я поставлю Array (1,2,3 ..., 9,10), код работает очень медленно.

Следующее необходимо, потому что оно будет использоваться, когда мой массив станет длинным. Действительно, мой массив получит более 2 тысяч комбинаций. (Значения столбца A изменятся).

For x = 0 To 60
    For y = 0 To 2
        Cells(x + 1, y + 2).Value2 = arValues(x, y)
    Next
Next

Весь мой код ниже,

Sub AllCombinations()

    Dim nums(): nums = Array(Range("A1:A5").Value)
    Dim arValues(999999, 5)
    Dim n1 As Integer, n2 As Integer, n3 As Integer, n4 As Integer, n5 As Integer, n6 As Integer, x As Long
    Dim y As Integer

    For n1 = 0 To UBound(nums)
        For n2 = n1 + 1 To UBound(nums)
            For n3 = n2 + 1 To UBound(nums)

                arValues(x, 0) = nums(n1)
                arValues(x, 1) = nums(n2)
                arValues(x, 2) = nums(n3)

                x = x + 1

            Next
        Next
    Next

    For x = 0 To 60
        For y = 0 To 2

            Cells(x + 1, y + 2).Value2 = arValues(x, y)

        Next
    Next

    For x = 61 To 120
        For y = 0 To 2

            Cells(x - 60, y + 6).Value2 = arValues(x, y)

        Next
    Next

End Sub

Here is a preview of the data

1 Ответ

0 голосов
/ 02 июля 2018

Попробуйте:

Dim nums()
nums = Range("A1:A5").Value

Массив nums будет выглядеть так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...