-1

問題の説明:

2 つのシートがあり、1 つは空白のレポート テンプレートで、もう 1 つはデータが含まれています。データ セット内の列 M に場所 ID があります。各場所 ID は、() の形式になっています。たとえば、マイアミにある倉庫は、配送部門の一部であるため、「フロリダ州マイアミ (DIST)」となります。

すべての一意の値を配列にインポートし、内容をトリミングして、都市の名前だけの配列になるようにしたいと思います。


余分な詳細:

私は、データを別のシートに高度にフィルタリングし、トリミングし、範囲を参照するという昔ながらの「頼りになる」方法でこれを行うことを考えましたが、それに反対することにしました。

シートオブジェクトの代わりに配列を使ったプログラミングについてもう少し学びたいと思います.VBAがそれらを処理する方法と、配列がより動的なプロパティを持つところで使用する他の言語が好きではないので、私は避けてきました。

4

1 に答える 1

4

メソッドを使用WorkSheetFunction.Transposeして、列のデータを配列にコピーできます。それはあなたに与えますindex 1 based Single Dimensional Array。複数の列がある場合、メソッドは多次元配列を提供します。

Dim arrayV as Variant    
arrayV = WorkSheetFunction.Transpose(Sheets(1).Range("A2:A20").Value)

この範囲で最後に使用された行を見つけるには、配列に入力されている空のセル値を削除する次のコードを使用します。

Dim LastRow as Long
LastRow = Sheets(1).Cells(Sheets(1).Rows.Count, _
      Sheets(1).Range("A2:A20").Column).End(xlUp).Row 
arrayV = WorkSheetFunction.Transpose(Sheets(1).Range("A2:A20").Resize(LastRow-1).Value)

次に、一意の値を取得するために、dictionary一意のアイテムのみを保持するオブジェクトを使用できます。

Dim dc as Object
Set dc = CreateObject("Scripting.Dictionary")

For i = Lbound(arrayV) to Ubound(arrayV)
   If Not dc.Exists(arrayV(i)) Then
      dc.Add arrayV(i), i
   End If
Next i

'--output to Sheet or do whatever you want with this
dc.Keys() '-- gives you an array with the unique values    

Set dc = Nothing
于 2013-01-21T03:46:06.560 に答える