【问题标题】:Searching, Sorting, Matching, within Dynamic Multidimensional Array - VBA在动态多维数组中搜索、排序、匹配 - VBA
【发布时间】:2017-01-03 02:38:55
【问题描述】:

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

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

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

Item #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 中实现这一点。我发现很难找到这样的例子。

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

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

【问题讨论】:

  • 我的建议是你看看如何使用字典。
  • 你说得对,数组处理比范围处理快得多。我无法在我所在的位置查看您的图像,但我建议您在数据仍在数组中时将所有处理应用于数据,然后将其读回范围。
  • 是的,我同意。我只是不确定如何使用 VBA 在数组中应用我的所有数据处理。你有什么建议可以去哪里看吗?
  • 谢谢雷米。我只是偷看了字典,它看起来好像可以像我的人造数据库中的记录集一样使用。
  • 不幸的是,雷米,字典似乎只能包含唯一值,在我的示例中,我将检索重复的项目编号。

标签: arrays vba excel sorting


【解决方案1】:

“可能出现多次”是什么意思?听起来您需要 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 2011-05-23
    • 2016-01-28
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2014-08-26
    相关资源
    最近更新 更多