Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2012, 13:40   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию трехмерный массив

привет всем)

народ, помогите собрать трехмерный массив, а то я запуталась совсем
так будет правильно?

Код:
Dim Arr() 
Dim n As Integer, r As String, c As Integer    'номер, название, цвет 
'в итоге нужен массив Arr(n,r,c)
n = ActiveSheet.Range([L2], [L122])
r = ActiveSheet.Range([M2], [M122]).Value
c = ActiveSheet.Range([M2], [M122]).Interior.Color.Index
Redim Arr(n,r,c)
и потом, как мне обратиться, например, к элементу "r" и "с" при известном "n" ?
Bape}l{ka вне форума Ответить с цитированием
Старый 26.01.2012, 14:00   #2
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Зачем Вам три измерения? Работайте в двух.
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 26.01.2012, 14:02   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Как я понял, нужен двумерный массив из 121 строк и 3 столбцов.
Цвет или индекс цвета диапазона не образуют массив (в отличие от значений или формул), поэтому надо считывать цвет каждой ячейки:
Код:
Sub bb()
Dim Arr(), c(), i&
ReDim c(2 To 122)
For i = 2 To 122
    c(i) = Range("M" & i).Interior.Color 'или .ColorIndex
Next
Arr = Application.Transpose(Array(Application.Transpose([L2:L122]), Application.Transpose([M2:M122]), c))

End Sub
Для n-й строки: Arr(n,1) - номер, Arr(n,2) - название, Arr(n,3) - цвет.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 26.01.2012, 14:11   #4
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
при известном "n"
Всё-таки достаточно двухмерного
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 26.01.2012, 14:25   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно в словарь собирать номера (они ведь не повторяются), а в Item словаря название и цвет (в строку через разделитель, или в массив из двух элементов).
Всё равно диапазон циклом перебирать, чтоб цвет выбрать. Зато потом по номеру можно без перебора взять и название, и цвет.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.01.2012, 14:37   #6
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

возможно достаточно и двух, тем не менее.. если можно три - почему нет?

Казанский, я несовсем поняла, что такое Application.Transpose ??

и я так поняла, что 3-хмерный / n-менрый массив, это просто масив, состоящий из массивов? и тогда можно просто собрать:

Код:
For i = 2 To 122
    c(i) = Range("M" & i).Interior.Color 'или .ColorIndex
    n(i) = Range("L" & i).Value
    r(i) = Range("M" & i).Value
Next
'тогда массив Arr(n,r,c)
и вот у меня есть известное "r", как мне в таком случае узнать "n" и "c"?? у меня только в голову идея через цикл приходит, но ведб наверняка можно как-то по-другому, или я ошибаюсь?

Код:
For Each r In Arr(n, r)
       If r = x Then MsgBox r & ", " & n
Next r
Bape}l{ka вне форума Ответить с цитированием
Старый 26.01.2012, 14:48   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Достаточно одного
Код:
Public Type m_3D_Nassiv
color_Index As Long
Value1 As Variant
Value2 As Variant
End Type


 Public Sub Go()
 Dim M(1 To 122) As m_3D_Nassiv
 For i = 2 To 122
    M(i).color_Index = Range("M" & i).Interior.Color 'или .ColorIndex
   M(i).Value1 = Range("L" & i).Value
    M(i).Value2 = Range("M" & i).Value
 Next
 End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 26.01.2012, 14:49   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> что такое Application.Transpose ??
Функция листа ТРАНСП: из массива NxM делает массив MxN

> и я так поняла, что 3-хмерный / n-менрый массив, это просто масив, состоящий из массивов?

Нет. Можно сделать массив, состоящий из массивов, но обращаться к нему надо по-другому. Например, к двумерному массиву: a(i,j), а к одномерному массиву одномерных массивов: a(i)(j).
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 26.01.2012 в 14:57.
Казанский вне форума Ответить с цитированием
Старый 26.01.2012, 14:50   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

"Известное r" - это что? Порядковый номер (т.е. известный индекс массива) или номер, который содержится где-то в массиве?
Если второе - то лучше словарь использовать.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.01.2012, 14:54   #10
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

"r" - это значение, которое содержится в массиве, не порядковый номер

doober, я тоже подумала, что можно обойтись одним измерением, но тремя массивами поотдельности =ь тогда и все вопросы решаются легко..

Код:
Dim n(), r(), c()  'номер фигуры, название, цвет
Dim i As Integer        'где i - номер строки

ReDim r(2 To 122)
ReDim n(2 To 122)
ReDim c(2 To 122)
    For i = 2 To 122
        c(i) = Range("M" & i).Interior.Color 'или .ColorIndex
        n(i) = Range("L" & i).Value
        r(i) = Range("M" & i).Value
    Next
Application.Transpose - аа, транспортирование матрицы)) ясно

спасибо всем за отклики, и вообще, что всегда подсказываете))

Последний раз редактировалось Bape}l{ka; 26.01.2012 в 15:05.
Bape}l{ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Трехмерный массив Leisan_S Паскаль, Turbo Pascal, PascalABC.NET 7 09.01.2015 19:17
трехмерный массив world12_tk Помощь студентам 2 06.01.2012 17:04
как заполнить трехмерный массив процедурой? MyLastHit Общие вопросы Delphi 9 03.01.2011 21:00
Трехмерный дин. массив revanatar Общие вопросы C/C++ 3 29.11.2010 22:02
Упорядочить трехмерный массив и вывести максимальные 160 значений Alex Cones Общие вопросы Delphi 0 20.08.2009 12:30