3

我想知道如何,或者如果可能的话,在给定集合的情况下使用 VBA 创建一个数据透视表。或者改进我的代码的当前算法。

目前,我收藏了大约 28000 件商品。每个项目都有一个唯一的 ID、项目编号和价格。我想生成一个具有唯一 ID、价格最低的部件号的新系列。所以我在想生成数据透视表将聚合所有项目编号,并找到最低价格。然后基于该表,我可以生成一个新集合,还是应该改进我拥有的算法?

例如:

item[unique_id]: item number, price

Item[1]: 11111, 10
Item[2]: 22222, 2
Item[3]: 11111, 3
Item[4]: 11111, 15
Item[5]: 22222, 1
Item[6]: 33333, 2

然后结果集合将类似于:

Item[3]: 11111, 3
Item[5]: 22222, 1
Item[6]: 33333, 2

目前,我有执行以下操作来创建新集合的代码

For Each Item in OriginalCollection

    ' Temp item holder for comparison
    Set minItem = item
    i = 1

    Do While (i <= OriginalCollection.Count)
      if OriginalCollection(i).itemNumber = minItem.itemNumber And OriginalCollection(i).price < minItem.price Then
        Set minItem = OriginalCollection(i)

        ' reduce the size of collection, so fewer iterations
        OriginalCollection.Remove (i)
        OriginalCollection.Remove (minItem.Id)
      End if
      i = i + 1
    Loop

    If Not InCollection (MinCollection, minItem.Id) Then
        MinCollection.Add minItem, minItem.Id
    End If
Next item

先感谢您。

4

1 回答 1

2

每当我需要完成您的任务时,我只需按项目编号对表格进行排序,然后按价格排序。我假设您的数据在单元格 A1:C28000 中。在相邻列的单元格中,从 D2 开始,我输入公式:=if(b2=b1,"",1)。这告诉我项目编号何时发生变化。并且每次商品编号发生变化时,我都知道我已经找到了新商品的最便宜价格(因为每组商品编号都是按价格升序排序的)。将 D 列中的公式复制到项目列表的长度。

打开自动过滤器并过滤 D=1 列中的值。这些都是你每件商品的最低价格。(如果您的第一个项目没有重复项进行调整;即,只需添加列标题)

这种方法不使用数据透视表,但根据您的问题描述,我不确定您是否需要它们。

于 2012-10-22T17:11:38.867 回答