我想知道如何或者如果可能的话,使用给定的集合来使用VBA创建pivotTable。或者改进我的代码的当前算法。
目前,我有一个大约有28000个项目的收藏。每个项目都有唯一的Id、项目编号和价格。我想生成一个具有唯一Id的新集合,即具有最低价格的零件号。所以我在想,生成pivotTable将聚合所有的商品编号,并找到最低价格。然后基于这个表,我可以生成一个新的集合,或者我应该改进我已有的算法?
例如:
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提前谢谢你。
发布于 2012-10-23 01:11:39
任何时候我需要实现你想要的东西,我只需要按照商品编号,然后是价格对表格进行排序。我假设您的数据在单元格A1:C28000中。在相邻列的单元格中,以D2开头,输入公式:=if(b2=b1,"",1)。当项目编号发生变化时,它会告诉我。每当商品编号发生变化时,我知道我已经找到了新商品的最便宜的价格(因为每组商品编号都是按价格升序排序的)。将D列中的公式向下复制到项目列表的长度。
打开自动筛选和筛选列D=1中的where值。这些都是每件商品的最低价格。(如果您的第一个项目没有重复项,请进行调整;即,仅添加列标题)
这种方法不使用透视表,但根据您的问题描述,我不确定您是否需要它们。
https://stackoverflow.com/questions/13015085
复制相似问题