2016-08-26 10 views
2

私が始めてから、これはすべてSQLクエリを使って行うことができます。動的多次元配列内での検索、ソート、マッチング、VBA

約30キロ行のExcelスプレッドシートで約25個の列があり、項目のリストで項目#を使用していることを伝えてくださいレベル1の一致。それを「マスター」シートとしましょう。

一意識別子であるアイテム#1年代、すなわち、複数回表示されることができる:

商品番号10000はこのシートに複数回現れることができます。

だから、動的配列を作成し、ユーザがブック内の別のシート(「ITEMLIST」)になり、いくつかの項目彼らに入る

Sub Items() 

Dim Items() As Variant 

    Sheets("Master").Activate 

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

End Sub 

を使用してアレイに全体マスターシートを挿入Item List

「マスター」内の各アイテムのすべての出現(1つまたは重複しているかどうかにかかわらず)が必要で、別のシートの個々の行に出力する必要があります。

私はVBAでこれを達成する方法が固まっています。私はこれの例を見つけるのが難しいと思っています。

複製物をより早く見つけるために配列を最初に並べ替えたいですか?ユーザー作成のリストを1次元配列に変換し、2次元配列と交差する点を見つけようとしますか?私は "マスター"配列の作成後にどこから始めるべきか分かりません。

「マスタ」シートでインデックスマッチングや繰り返しループの代わりに配列を使用しているのは、使用可能な処理能力/物理メモリがコンピューティング環境によって一貫しないため、配列が最も効率的な方法は、何人かのユーザーが戻り値を処理することができれば数分かかることを避けることです。

+1

私のアドバイスは、辞書の使い方を見ていることです。 –

+1

配列処理は範囲処理よりもはるかに高速です。私はどこにいてもイメージを見ることができませんが、アレイにまだ入っている間にすべての処理をデータに適用してから範囲に戻すことをお勧めします。 – SandPiper

+0

はい私は同意します。私はすべてのデータ処理をVBAで配列に適用する方法がわかりません。あなたはどこを見ていいですか? –

答えて

0

「複数回表示される」とはどういう意味ですか?あなたはデータベース(AccessまたはSQL Server)やいくつかのランク付けを行い、配列内の最も高い/最低の要素を選択するように、xtoグループと合計が必要なように思えます。または、配列の特定の要素を新しいシートにコピー/ペーストしたいと言っていますか?

「x」の値を持つB列のアイテムをコピーして別のシートに貼り付ける場合は、下のスクリプトを実行します。

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