Тема: Как "ходить" по динамическому массиву
Как "ходить" по динамическому массиву и находить количество нужных блоков с определенным набором атрибутов????
:)
Подскажите пожалуйста
:)
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Как "ходить" по динамическому массиву
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как "ходить" по динамическому массиву и находить количество нужных блоков с определенным набором атрибутов????
:)
Подскажите пожалуйста
:)
Ходить нужно осторожно! Что бы атрибуты случайно не раздавить!:))
2 Дарья
Задайте нормально вопрос. А то не понятно что за массив, какие атрибуты и т.п.
> Дарья
Если у тебя первый элемент в субсписках это
Handle или ObjectID блока, а остальные
элементы - значения атрибутов, то можно попробовать
такой вариант
Option Explicit 'Test Sub RemoveEqual() Dim ar(3, 3) ' master array (first element must be a block Handle or block ObjectID) ' the rest elements are attribute values: ar(0, 0) = "F2D": ar(0, 1) = "uh": ar(0, 2) = "oh": ar(0, 3) = "ah" ar(1, 0) = "D3G": ar(1, 1) = "nif": ar(1, 2) = "nuf": ar(1, 3) = "naf" ar(2, 0) = "N1H": ar(2, 1) = "uh": ar(2, 2) = "oh": ar(2, 3) = "ah" ar(3, 0) = "F4K": ar(3, 1) = "eh": ar(3, 2) = "nah": ar(3, 3) = "vah" ' array to compare with: Dim match(2) match(0) = "uh": match(1) = "oh": match(2) = "ah" If UBound(ar, 2) - 1 <> UBound(match) Then MsgBox "There are not equal dimensions of the arrays" Exit Sub End If Dim result() ' returned array result = ReturnDupes(ar, match) Dim i Dim msg As String For i = 0 To UBound(result) msg = msg & result(i) & vbCr Next MsgBox msg End Sub Function ReturnDupes(ByVal ar As Variant, ByVal match As Variant) As Variant ' return the first elements of dynamic array in case if ' the all of the rest elemements of the every single subarray ' in them are identical to all elements of the array ' to compare with Dim ret() Dim i, j, k For i = 0 To UBound(ar, 1) Dim check As Boolean check = True For j = 1 To UBound(ar, 2) If ar(i, j) <> match(j - 1) Then check = False End If Next If check Then ReDim Preserve ret(k) ret(k) = ar(i, 0) k = k + 1 End If Next ReturnDupes = ret End Function
~'J'~
> Fatty
Да нет,Handle или ObjectID здесь непричем. Динамический массив типа Ar(X)(Y)As Variant, X- количество марок в списке, Y- количество столбцов (т.е. Ar(i)(0)- марка, Ar(i)(1)- обозначение/N чертежа/, Ar(i)(n)- количество; ну и т.д.). Дарье просто надо исходя из значений одних "ячеек" выцепить значения других (т.е. зная, к примеру, марку и наименование -получить значение количества)
> AlexV
Тогда по-русски это просто называется
группировкой массива с суммированием
Дерзай сам, у меня времени нема больше :)
~'J'~
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Как "ходить" по динамическому массиву
Форум работает на PunBB, при поддержке Informer Technologies, Inc