2016-08-01 8 views
0

私は列B範囲から一意の値を取得する - /#Nを削除する方法をセルの値

Dim lastrow as Long 
dim var2 as variant 
dim obj2 as Object 
set obj2 = CreateObject("Scripting.Dictionary") 
lastRow = Cells(Rows.count, 3).End(xlUp).Row 
    var2 = Application.Transpose(Range([B2], Cells(Rows.count, "B").End(xlUp))) 

    For lastRow = 2 To UBound(var2, 1) 
     obj2(var2(lastRow)) = 1 

    Next 
    Range("C1:C" & obj.count) = Application.Transpose(obj2.keys) 

から一意の値を取得し、私はこのデータを持って、このコードがあります。

enter image description here

次に、列Cに一意の値を貼り付けます。ただし、列Cの出力には#N/Aの値が含まれています。列Cに#N/Aが表示されないようにする方法はありますか?

+0

私はそれを台無しにしたとは思わない。トランスポーズを使用するのは間違いありません。あなたのコードで間違っているのは、 'obj.count'が' obj2.count'であることだけです。 '#N/A'は配列のサイズが配列より大きいために発生します。 –

+0

@ThomasInzinaうん。それは私の間違いです。とにかく、配列の内容を消去する方法はありますか?ありがとう – ramj

+0

辞書が空であることを意味しますか?または列Cをクリアしますか? –

答えて

1

代わりのDictionaryを使用して、あなたは、ソースRangeのコピーを作成した後RangeRemoveDuplicates方法を使用して目的を達成することができます。例:

Option Explicit 

Sub Test() 

    Dim rngSource As Range 
    Dim rngTarget As Range 

    Set rngSource = Sheet1.Range("B2", Sheet1.Range("B2").End(xlDown)) 
    Set rngTarget = Sheet1.Range("C2") 

    CopyUniqueValues rngSource, rngTarget 

End Sub 

Sub CopyUniqueValues(rngSource As Range, rngTarget As Range) 

    'copy source to target 
    rngSource.Copy rngTarget 

    'extend target range 
    Set rngTarget = rngTarget.Resize(rngSource.Rows.Count, 1) 

    'remove duplicates 
    rngTarget.RemoveDuplicates Columns:=1, Header:=xlNo 

End Sub 
関連する問題