Страницы: 1
RSS
Создание одномерного массива VBA
 
Добрый день.
Дело вот в чем:
Есть список фамилий, который будет пополняться или уменьшаться, на "Лист2" и его надо загнать в массив и вроде как нижеуказанный код справляется с этим, но он это делает в двумерный массив. Как сделать в одномерный?
Скорее всего я чего то не понимаю, пожалуйста, поправьте, что не так?

Код
Sub spisok()
    Dim massiv()
    massiv = Worksheets("Лист2").Range(Cells(2, 2), Cells(2, 2).End(xlDown)).Value
End Sub
 
А чем Вам мешает ДВУмерность полученного массива?
Согласие есть продукт при полном непротивлении сторон
 
Вот так нужно?
Код
Sub spisok()
Dim massiv()
Dim i&, j&
i = Cells(Rows.Count, 2).End(xlUp).Row
ReDim massiv(1 To i - 1)
For j = 2 To i
    massiv(j - 1) = Cells(j, 2)
Next j
End Sub
Изменено: Nordheim - 27.05.2017 17:16:57
"Все гениальное просто, а все простое гениально!!!"
 
С двухмерным массивом у меня не работала функция Join
Код
m = Join(massiv, ",")
Изменено: Nordheim - 27.05.2017 17:20:37
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал: Вот так нужно?
Nordheim, так НЕ нужно. Не учите плохому. Зачем эти лишние (и медленные) телодвижения в коде? Хотя Ваш ответ полностью отвечает на поставленный вопрос
dwenlvov, обратиться к любому элементу такого массива можно просто указав вторую размерность, например
Код
Sub spisok()
Dim massiv()
    massiv = Worksheets("Лист2").Range(Cells(2, 2), Cells(2, 2).End(xlDown)).Value
    MsgBox massiv(4, 1)   'Пупкин
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Nordheim написал: не работала функция Join
Тогда быстрее так
Код
Sub spisok()
Dim massiv()
    massiv = Worksheets("Лист2").Range(Cells(2, 2), Cells(2, 2).End(xlDown)).Value
    ReDim arrTemp(1 To UBound(massiv))
    For I = 1 To UBound(massiv)
        arrTemp(I) = massiv(I, 1)
    Next
    m = Join(arrTemp, ",")
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Но функция о которой я написал не будет работать с двумерным массивом.
Поэтому мне приходилось делать лишние телодвижения.
Я плохому не учу просто показал как сделать массив одномерным.:)
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
функция о которой я написал не будет работать с двумерным массивом.
Да в таком случае вообще теряется смысл использования этой функции. Раз уж Вы перебираете ячейки (или массив, как в моем примере), то и сцепляйте сразу значения в нужную строку. Функция JOIN делает то же самое (перебор значений)
Код
Sub spisok()
Dim massiv()
    massiv = Worksheets("Лист2").Range(Cells(2, 2), Cells(2, 2).End(xlDown)).Value
    For I = 1 To UBound(massiv)
        If m <> Empty Then
            m = m & "," & massiv(I, 1)
        Else
            m = massiv(I, 1)
        End If
    Next
End Sub
Изменено: Sanja - 27.05.2017 17:34:33
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Nordheim написал: Я плохому не учу
:) . Не обижайтесь. На вопрос, поставленный в теме, Вы ответили точно
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Nordheim,
Ба! спасибо за... на самом деле за такое количество ответов и раскрытие не только моей темы. Все пригодится)
Не знаю, что за беда, но никак с массивами не подружусь, сейчас стало попроще, благодаря вам) Еще раз спасибо)
 
Цитата
dwenlvov написал: никак с массивами не подружусь
Может чем поможет
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Читают тему
Наверх