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 に答える