2017-01-11 4 views
-1

特定のセルの範囲から一意の値を取得する必要があります。
A1 = xで、A2 = Y、A3 = Z、私はB1 =のX、Yを取得したいA4 = X
、Z
私のソリューションです:B2で
CONCATENATEのA1、A2、A3、A4、。
分割B2。
分割されたB2から新しいコレクションを作成します。 C1、C2に
出力コレクション要素、..Ci
CONCATENATEのC1、C2、.. CI B1にVBA新しいコレクションを単一セルに出力

C1、C2に出力コレクションに回避することはできますか?いくつかの変数を介してB1に直接出力しますか?

''''''' 
concatenation part  
'''''''' 
    Dim ary As Variant 
    Dim Arr As New Collection, a 
    Dim i As Long 
    ary = split(Range("b2"), ",") 

    For Each a In ary 
    Arr.Add a, a 
    Next 

    For i = 1 To Arr.count 
    Cells(1, i+2) = Arr(i) ' output collection in some cells 
    Next 
    ''''''''''''''''''''''''' 
concatenation part 
''''''''''' 

ありがとうございます。再び、アレイ内

+1

IMOあなたの質問/問題の説明に従うのは難しいです。クロップされたスクリーンショットまたは2つを追加することをお勧めします。配列内の –

+0

、再び分割、spit(a、 "=") –

+0

ユニークな値については、見てみませんか?http://www.ozgrid.com/forum/showthread.php?t=160873? – Cyril

答えて

1

は、あなたが "オンザフライ" で遅延バインディングを使用することができますが、Dictionaryオブジェクト:おそらく

Sub main() 
    Dim cell As Range 

    With CreateObject("Scripting.Dictionary") 
     For Each cell In Range("A1:A4") '<--| change "A1:A4" to whatever range you need 
      .Item(cell.Value) = .Item(cell.Value) + 1 
     Next cell 
     Range("B1").Value = Join(.keys, ",") 
    End With 
End Sub 
+0

ありがとうございます。あなたのソリューションは、私が最初の連結を終了する必要がありますが明確でシンプルです – user2284877

+0

あなたは歓迎です – user3598756

0

splitspit(a,"=")が一緒

x=0 
redim arrOutput(ubound(ary)) 
For Each a In ary 
    arrOutput(x)= split(a,"=")(1) 
    x=x+1 
Next 

range("b1")=join(arrOutput,",") 

または単に=で分割し、得られたから奇数を取るそれを戻すためにJOINを使用し、その後、別の配列ではなく、コレクションにインデックス1を添加多分配列ですか?

0

ユニークなものを保持する必要がある場合 - 常に辞書について考えてください。原因はExistsです。ここで小さな例です:

Sub test() 
    Dim NonUniqueValues As Variant 
    Dim UniqueValues As Object 
    Dim i As Long 

    'gather source array 
    NonUniqueValues = Union([A1], [A2], [A3], [A4]).Value2 

    'set dict 
    Set UniqueValues = CreateObject("Scripting.Dictionary") 

    'loop over array 
    For i = LBound(NonUniqueValues, 1) To UBound(NonUniqueValues, 1) 
     If Not UniqueValues.Exists(NonUniqueValues(i, 1)) Then _ 
       Call UniqueValues.Add(Key:=NonUniqueValues(i, 1), Item:=NonUniqueValues(i, 1)) 
    Next 

    'output 
    [B1] = Join(UniqueValues.Keys, ",") 

End Sub 

enter image description here

0

Public Function KonKat(rng As Range) As String 
    Dim c As Collection, r As Range, i As Long 

    Set c = New Collection 
    On Error Resume Next 
     For Each r In rng 
      c.Add r.Value, CStr(r.Value) 
     Next r 
    On Error GoTo 0 

    For i = 1 To c.Count 
     KonKat = KonKat & "," & c.Item(i) 
    Next i 
     KonKat = Mid(KonKat, 2) 
End Function 

enter image description here

関連する問題