Как передать вектор в строку в массиве в Excel vba? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть массив и вектор. Я хочу передать / заменить строку в массиве на вектор.

2d array, as below
arr = [[1, 2],
       [3, 4],
       [a, b]]       <--- replace with vct here

...where vct = [[5, 6]]

В то время как это может быть сделано бесхитростно, используя наивный цикл, мне интересно, есть ли какой-нибудь творческий обходной путь для этого. Пример как ниже.

Использование наивного цикла:

For i = 1 to 2
    arr(3, i) = vct(i)
Next i

... или какой-нибудь умный обходной путь:

arr(3, :) = vct    ...where ":" represents "all columns"

Ожидаемый результат:

arr = [[1, 2],
       [3, 4],
       [5, 6]]

Tbh У меня мало ожиданий от vba, поскольку даже простая индексация массива на самом деле не вещь. Я просто надеюсь, если кто-нибудь захочет сделать это, чтобы найти решение. Тч


Изменить, чтобы улучшить ясность вопроса, добавив блок кода VBA. Смотри ниже

    Dim arr(1 to 3, 1 to 2) as Integer
    Dim vct(1 to 2) as Integer
    Dim i as Integer

    ' filling in arr
    arr(1, 1) = 1
    arr(1, 2) = 2
    arr(2, 1) = 3
    arr(2, 2) = 4
    arr(3, 1) = 10
    arr(3, 2) = 20

    ' filling in vct
    vct(1) = 5
    vct(2) = 6

    ' passing the vector vct into last row of arr using for loop
    For i = 1 to 2
        arr(3, i) = vct(i)
    Next i

    ' as a result,
    ' arr(3, 1) = 5, and
    ' arr(3, 2) = 6
    ' which does its work perfectly
    ' but I am looking if there is any possibility
    ' to have a non-looping approach such as below
    ' arr(3, :) = vct
    '  
    ' this is because I am too accustomed to python syntax
    ' where it can be done as using ":"

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Звучит так, как будто вы хотите что-то вроде этого

  Sub test()
  Dim vaTest As Variant

    vaTest = Array(Array(1, 2, 3), Array(4, 5, 6))
        Debug.Print vaTest(0)(1) ' Prints 2
    vaTest(0) = Array(7, 8, 9) ' changing first array
        Debug.Print vaTest(0)(1) ' Prints 8
  End Sub
1 голос
/ 24 апреля 2019

Я рекомендую использовать подсчет массива на основе 0, потому что вы можете легко использовать Array(1, 2) для создания вектора.

Sub test()     
    Dim Vectors() As Variant

    'fill it with 3 vectors (0 to 2)
    Vectors = Array(Array(1, 2), Array(3, 4), Array("a", "b"))

    'replace third vector with another one
    Vectors(2) = Array(5, 6)
End Sub

До enter image description here

* После 1013 * enter image description here

Для прямого доступа к одному из этих векторов используйте:

Debug.Print Vectors(2)(0) '=5
Debug.Print Vectors(2)(1) '=6

Или для извлечения, например, второго вектора используйте

Dim SecondVector() As Variant
SecondVector = Vectors(1)

Debug.Print SecondVector(0) '=3

Для получения дополнительной информации об использовании массивов, я рекомендую прочитать:
Полное руководство по использованию массивов в Excel VBA

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