VBA-比较多维数组中的元素

时间:2019-01-09 18:48:01

标签: arrays vba sorting autocad

在我制作的AutoCAD VBA例程中,该程序搜索具有特定名称的动态块并提取一些动态属性-宽度和高度。

我到目前为止所拥有的是所有块及其属性的列表,但它们并未排序-如果一个块的宽度和高度与另一个块相同,则仅将它们单独列出。块信息采用多维数组的形式,例如:

PANEL(j,0)= Panel_ref

PANEL(j,1)=宽度

PANEL(j,2)=高度

(j只是循环遍历选择集中每个块的计数器。)

我要做的是能够将所有这些块分类为相同大小的组(而不是autocad组),因此,例如,如果有一些块大小为595x455(宽x高),则应将其分组它们有X个(例如Panel_ref#1)并且没有单独列出。我希望我已经足够清楚了。

基本上,它看起来像:

参考|宽度|身高|数量

1 | 600 | 800 | 3

2 | 700 | 900 | 1

3 | 650 | 1000 | 2

而不是......

参考|宽度|高度

1 | 600 | 800

2 | 600 | 800

3 | 600 | 800

4 | 700 | 900

5 | 650 | 1000

6 | 650 | 1000

...现在。 (对不起,我无法更好地格式化此帖子)

对数据进行排序的最佳方法是什么?我在线上看到了数组排序代码,但仅适用于非多维数组。

我想我需要循环遍历数组,找到不同的“大小”(宽度和高度),将它们存储在某个地方并将每个块与这些块进行比较?我当时想将宽度和高度转换为字符串(“ 800 x 600”),以这种方式进行比较,但是我确定可以将其以数字(双精度)格式完成。

如果需要的话,我可以发布一些代码,但认为现在就更容易了。

谢谢

保罗。

1 个答案:

答案 0 :(得分:0)

Excel VBA允许您指定多个排序键(Sort.SortFields.Add),还可以指定任何大小的排序范围(Sort.SetRange Range(“ A1:H200”))。

sample sort code