Вырезать первое измерение из 2D-массива - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь нарезать первое измерение двумерного массива. Переменная массива - это y (от 1 до 36, от 1 до 19). Мне нужно сделать это y (от 1 до 12, от 1 до 19). Чтобы выполнить такую ​​задачу, мне нужно l oop вот так

    If rw > 0 Then

    ListBox1.AddItem
    ReDim v(1 To n, 1 To UBound(y, 2))

    Dim i As Long, j As Long
    For i = 1 To n
        For j = 1 To UBound(y, 2)
            v(i, j) = y(i, j)
        Next j
    Next i
    ListBox1.List = v()

    n = 0
End If

Есть ли более простой способ выполнить такую ​​задачу без лишних циклов?

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Вы можете нарезать массив, как показано ниже. Большая часть этого кода предназначена только для заполнения первого массива, поэтому вам не нужно:

Sub x()

Dim v1(1 To 6, 1 To 3), i As Long, j As Long, v2()

'this loop is just to populate the first array
For i = 1 To UBound(v1, 1)
    For j = 1 To UBound(v1, 2)
        v1(i, j) = i * j
    Next j
Next i

'this is just to show the contents
Range("A1").Resize(UBound(v1, 1), UBound(v1, 2)) = v1

'this does the slicing (first three rows
v2 = Application.Index(v1, Evaluate("row(1:3)"), Application.Transpose(Evaluate("row(1:" & UBound(v1, 2) & ")")))
'this shows the sliced array
Range("F1").Resize(UBound(v2, 1), UBound(v2, 2)) = v2

End Sub

enter image description here

1 голос
/ 08 апреля 2020

вы можете использовать Tranpose ():

Dim v As Variant, v1 As Variant

v = Range("A1").Resize(36, 19).Value' just to fill a 36x19 array


v1 = Application.Transpose(v)
ReDim Preserve v1(1 To UBound(v, 2), 1 To 12)
v = Application.Transpose(v1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...