2016-03-24 8 views
0

私はこの1つに困惑しており、検索で答えを見つけることができませんでした。VBA:.RemoveDuplicatesの列番号Variabl配列を作成

これは、範囲の最後の3つの列から重複を削除するときにマクロレコーダーから取得されます。

私が代わりにアレイ(3、4、5)のこの使用して変数を行うマクロを作りたい
Sub Macro1() 
' Macro1 Macro 
    Range("A1:E8").Select 
    Application.CutCopyMode = False 
    ActiveSheet.Range("$A$1:$E$8").RemoveDuplicates _ 
     Columns:=Array(3, 4, 5), Header:=xlYes 
End Sub 

が、変数から構築された配列を渡そうとしたとき、私はエラーを取得します。

Sub MyTry1() 
    Dim iArray() As Integer, i As Integer 
    With ActiveSheet.Range("$A$1:$E$8") 
     ReDim iArray(1 To .Columns.Count - 2) 
     For i = 1 To 3 
      iArray(i) = i + 2 
     Next i 'Result is iArray= (3, 4, 5)  
     .RemoveDuplicates Columns:=iArray, Header:=xlYes 
     'returns Run-time error "5": Invalid procedure call or argument 
    End With 
End Sub 

私はInteger型、Long型、Variant型のデータを試しましたが、運はありませんでした。

答えて

2

あなたが整数のゼロベースのバリアント配列を使用して

Sub MyTry2() 
    Dim iArray As Variant, i As Integer 
    Dim rData As Range 
    Set rData = Range("$A$1:$E$8") 
    With rData 
     ReDim iArray(0 To .Columns.Count - 3) 
     For i = 0 To UBound(iArray) 
      iArray(i) = i + 3 
     Next i 
     .RemoveDuplicates Columns:=(iArray), Header:=xlYes 
    End With 
End Sub 
以下のように 括弧に配列リファレンスをラップすることができます