VBA - сравнить элементы в многомерном массиве - PullRequest
0 голосов
/ 09 января 2019

В созданной мной программе AutoCAD VBA программа ищет динамические блоки с определенным именем и извлекает некоторые динамические свойства - ширину и высоту.

Пока у меня есть список всех блоков и их свойств, но они не отсортированы - если блок имеет одинаковую ширину и высоту с другим, он просто перечисляет их по отдельности. Информация о блоке представлена ​​в виде многомерного массива, например:

PANEL (j, 0) = Panel_ref

ПАНЕЛЬ (j, 1) = ширина

ПАНЕЛЬ (j, 2) = высота

(j - просто счетчик при циклическом переключении каждого блока в наборе выбора.)

Что я хотел бы сделать, так это уметь сортировать все эти блоки по группам (не по группам autocad) одинакового размера, поэтому, если, например, есть несколько блоков размером 595x455 (ширина х высота), они должны быть сгруппированы так что их число X (скажем, Panel_ref # 1) и не представлено в отдельности. Надеюсь, я достаточно ясен.

Итак, в принципе, это будет выглядеть так:

Ref | Ширина | Высота | Количество

1 | 600 | 800 | 3

2 | 700 | 900 | 1

3 | 650 | 1000 | 2

вместо ......

Ref | Ширина | Высота

1 | 600 | 800

2 | 600 | 800

3 | 600 | 800

4 | 700 | 900

5 | 650 | 1000

6 | 650 | 1000

... как сейчас. (извините, я не могу лучше отформатировать этот пост)

Каков наилучший способ сортировки этих данных? Я видел код сортировки массивов в Интернете, но только для не многомерных массивов.

Полагаю, мне нужно было бы циклически перемещаться по массиву, находить разные "размеры" (ширина и высота), хранить их где-то и сравнивать каждый блок с этими? Я думал о преобразовании ширины и высоты в строку («800 x 600»), сравнивая их таким образом, но я уверен, что это можно сделать в их числовом (двойном) формате.

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

Спасибо

Paul.

1 Ответ

0 голосов
/ 10 января 2019

Excel VBA позволяет указывать несколько ключей сортировки (Sort.SortFields.Add), а также диапазон сортировки любого размера (Sort.SetRange Range ("A1: H200")).

sample sort code

...