在动态多维数组中搜索,排序,匹配 - VBA

时间:2016-08-26 12:11:01

标签: arrays vba excel-vba sorting excel

在开始之前,我知道所有这些都可以通过SQL查询来完成。请相信我目前正在构建一个活动目录,但现在这就是我所拥有的:

一个大约30k行的Excel电子表格,其中大约25列包含项目列表,使用项目#作为级别1匹配。我们称之为“主”表。

项目#是唯一标识符,可能会出现多次,即:

项目#10000可以在此工作表中多次出现。

所以我创建了一个动态数组,并使用

将整个主表插入到数组中
Sub Items()

Dim Items() As Variant

   Sheets("Master").Activate

   Items = Range("A3", "AL" & Range("a1").End(xlDown).Row)

End Sub

用户将在工作簿中的另一个工作表(“itemlist”)中,并将输入他们需要的一些项目,如下所示:Item List

我需要“主”中每个项目的所有出现(无论是单个值还是重复值),以输出到另一个工作表上的各个行。

我遇到了如何在VBA中实现这一目标。我发现很难找到这方面的例子。

我是否想先对数组进行排序,以便更快地找到重复数据?我应该将用户创建的列表转换为单维数组并尝试找到与2d数组相交的点吗?我不确定在创建“主”阵列后从哪里开始。

我在“Master”表中使用数组而不是一堆索引匹配或迭代循环的原因是因为计算环境可用的处理能力/物理内存不一致,所以数组似乎是最多的有效的方法可以避免一些用户在返回值的情况下花费几分钟时间来处理它。

1 个答案:

答案 0 :(得分:0)

你是什么意思'可能多次出现'?听起来你需要xto分组和求和,就像在数据库(Access或SQL Server)中那样,或者做一些排名并选择数组中的最高/最低元素。或者,您是说要将数组中的某些元素复制/粘贴到新工作表中???

假设您要复制B列中的项目,其值为' x',并将它们粘贴到另一张表格中,好吧,只需运行下面的脚本即可。

Sub CopyData10()
Dim Rng As Range, cell As Range
Dim rw As Long
Set Rng = Worksheets("Sheet1").Range("B1:B10")
rw = 1
For Each cell In Rng
If LCase(cell.Value) = "x" Then
Worksheets("Sheet2").Cells(rw, "A") = cell.Offset(0, -1)
rw = rw + 1
End If
Next
End Sub