Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

vba excel. Как присвоить одномерному диапазону один ряд из значений из двумерного массива?

Александр Златенков Мыслитель (6175), закрыт 10 лет назад
Например есть двумерный массив
Его значения:

1 2 3 4 5 6 7

2 6 4 3 7 2 3

4 5 6 1 2 3 5

И есть именованный диапазон

rngish=[a1:a7]

Как присвоить диапазону только второй ряд из массива?
Дополнен 10 лет назад
Надо, разом присвоить. как, например, если весь массив присвоить равному по колличеству строк и столбцов диапазону операция проходит мгновенно в один такт. [a1:c7]=x (где Х это наш массив)
А как также присвоить одну вторую строку массива в один диапазон и например первое значение первой строки массива в другой диапазон?
Лучший ответ
Константин Карначук Гуру (4550) 10 лет назад
Dim r%, c%, v

v = Array(Array(1, 2, 3, 4, 5, 6, 7), Array(2, 6, 4, 3, 7, 2, 3), Array(4, 5, 6, 1, 2, 3, 5))

r = 21: c = 1
'одну вторую строку массива в один диапазон
ActiveSheet.Range(Cells(r, c), Cells(r, c + UBound(v(2)))) = v(2)


r = 23: c = 1
'первое значение первой строки массива в другой диапазон
ActiveSheet.Range(Cells(r, c), Cells(r + 2, c + UBound(v(2)))) = v(0)(0)
Остальные ответы
Aleksandr H. Мыслитель (6004) 10 лет назад
For i = 1 to 7 do
cells(i,1).value = Arr(1,i-1) ' масив начнем с 0-й позиции

как-то так
Александр ЗлатенковМыслитель (6175) 10 лет назад
получится семь поочередных операций.
Надо, разом присвоить. .

как, например, если весь массив присвоить равному по колличеству строк и столбцов диапазону операция проходит мгновенно в один такт.

[a1:c7]=x (где Х это наш массив)
Aleksandr H. Мыслитель (6004) А если вторую строку передать в одномерный масив и его присвоить диапазону?
Алексей Матевосов (AlexM) Просветленный (27395) 10 лет назад
Допустим исходный массив (диапазон) - D1:F7
Копировать надо один столбец массива в диапазон A1:A7
Range("D1:F7").Resize(7, 1).Offset(0, n).Copy (Sheets(1).Range("A1:A7"))
при n = 0,1,2 будет копироваться 1,2 или 3 столбец
Александр ЗлатенковМыслитель (6175) 10 лет назад
С циклом то понятно. Без цикла можно? Как если целиком масив копирую разом в диапазон? Выделить часть массива (как диапазон) и присвоить эти значения нужному диапазону
Алексей Матевосов (AlexM) Просветленный (27395) Range("D1:F7").Copy (Sheets(1).Range("A1")) так копируется весь диапазон D1:F1 в A1:C7 Range("D1:F7").Resize(7, 1).Offset(0, 1).Copy (Sheets(1).Range("A1")) так копируется второй столбец диапазона D1:F1, т. е. E1:E7 в A1:A7 Все можно сделать за раз без циклов.
Андрей Лящук Профи (975) 10 лет назад
А можно немного наркоманский код предложить? ;)

Sub gg()
Dim arr As Variant
Dim s As String
Dim d As New DataObject
arr = Array(Array(1, 2, 3, 4, 5, 6, 7), _
Array(2, 6, 4, 3, 7, 2, 3), _
Array(4, 5, 6, 1, 2, 3, 5))
ActiveWorkbook.Names.Add Name:="rngish", RefersToR1C1:="=Лист1!R1C1:R7C1"
For i = 0 To UBound(arr(1)): s = s & Str(arr(1)(i)) & Chr(10): Next
d.SetText (s)
d.PutInClipboard
ActiveSheet.Paste Range(ActiveWorkbook.Names("rngish").RefersTo)
ThisWorkbook.ActiveSheet.Cells(1, 2) = arr(0)(0)
End Sub
Похожие вопросы