Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 46
1

Присвоение значений двумерному массиву

09.07.2015, 14:05. Показов 7801. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с такой незадачей: при попытке заполнить двумерный массив значениями (константами) вываливается ошибка. Прошу совета.
Visual Basic
1
2
Dim J()
J = Array(Array("1", "2"), Array("3", "4"))
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 14:05
Ответы с готовыми решениями:

Присвоение значений многомерному массиву
Здравствуйте. Подскажите пожалуйста, как организовать присвоение многомерному массиву значений. ...

Присвоение значений переменным
В комбобокс на форме выводятся значения из столбца B. Private Sub UserForm_Initialize() i = 3 ...

Разбивка строки и присвоение значений
Прошу помощи в разбивке строки и присвоения значений. Имеется файл, в нем 4 колонки. Если в...

Присвоение порядковых номеров в порядке возрастания значений
Доброго всем времени дня. Поможите написать код для присвоения порядковых номеров в порядке...

7
3919 / 2316 / 785
Регистрация: 02.11.2012
Сообщений: 6,159
09.07.2015, 15:06 2
ошибка то какая, у меня именно эти две строчки прошли без ошибки.
1
2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 46
09.07.2015, 15:38  [ТС] 3
Ошибка "subscribe out of range" вылетает при дальнейшей попытке вывести этот массив

Visual Basic
1
Sheets("Лист1").Range("A3").Offset(0, 0).Resize(3, 3).Value = j()
0
3919 / 2316 / 785
Регистрация: 02.11.2012
Сообщений: 6,159
09.07.2015, 16:06 4
у вас массив 2 на 2, а вы выделяете 3 на 3 (Resize(3, 3)).
Visual Basic
1
Sheets("Лист1").Range("A3").Offset(0, 0).Resize(2, 2)=WorksheetFunction.Transpose(J())
offset можно не писать если вы не смещаетесь ни куда.
0
2 / 2 / 0
Регистрация: 26.12.2011
Сообщений: 46
09.07.2015, 16:23  [ТС] 5
В своем варианте использовал изменение рабочей области 3 на 3 и массив 3 на 3.

А можно но как-то избежать транспонироания массива а просто выложить в область? Ведь массив изначально задавался по строкам.
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
09.07.2015, 16:51 6
Лучший ответ Сообщение было отмечено Trigun68 как решение

Решение

Цитата Сообщение от Trigun68 Посмотреть сообщение
при попытке заполнить двумерный массив значениями (константами) вываливается ошибка
То, что Вы получаете - не двумерный массив, а одномерный массив одномерных массивов. Вы не можете обратиться к элементу массива J(1, 1), только так: J(1)(1). Transpose преобразует такую структуру в двумерный массив, который можно помещать в диапазон.
В VBA Excel двумерные массивы можно задавать так:
Visual Basic
1
2
3
J = [{1,2;3,4}]
'или
J = Evaluate("{1,2;3,4}")
1
0 / 0 / 0
Регистрация: 04.03.2021
Сообщений: 1
04.03.2021, 14:29 7
Казанский,

Помогите, пожалуйста. Вы отвечали на эту тему, но...

По этому принципу задаю массив, выдаёт ошибку. Не могу понять причину.
Если массив не определять в начале и по тексту основной программы использовать, тогда все нормально.
Но нужно именно глобальный массив, доступный во всех функциях потом.

Что я делаю не так?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim shape(2, 4) As Integer
      
Sub SetShape()
  shape = [{ 1, 2, 3, 4; 5, 6, 7, 8 }]
End Sub
 
Sub main()
Randomize
 
SetShape
 
End Sub
0
836 / 486 / 186
Регистрация: 09.03.2009
Сообщений: 1,676
04.03.2021, 14:43 8
Глобальный сделать можно, но вот так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim vShape '(2, 4) As Integer
 
Sub SetShape()
   vShape = [{ 1, 2, 3, 4; 5, 6, 7, 8 }] ' работает
   'vShape = Evaluate("{ 1, 2, 3, 4; 5, 6, 7, 8 }") ' тоже работает
End Sub
 
Sub main()
   Randomize
   SetShape
End Sub
То есть без указания типа (будет Variant) и размерности (она задастся при инициализации).
Проверял в Excel 2007
0
04.03.2021, 14:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2021, 14:43
Помогаю со студенческими работами здесь

Присвоение значений двумерному массиву
Есть текстовый файл, в нем поле для игры 12х12. Читаю нужные строки File.ReadAllLines, создаю...

Присвоение массиву значений stringgrid
Не могу присвоить, выдает ошибку, подскажите , что исправитьprocedure TForm1.Button2Click(Sender:...

Присвоение значений всему массиву
Друзья, подскажите, пожалуйста. Есть в Delphi оператор или команда, с помощью которой можно...

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru