2016-10-06 14 views
0

RemoveDuplicatesを使用していて、列設定をハードコードする以外の方法はありません。VBA RemoveDuplicates:変数で列を設定できません

Worksheets("SheetName").Activate 
ActiveSheet.Range("A:Z").RemoveDuplicates _ 
Columns:=VBA.Array(1, 2, 3), _ 
    Header:=xlYes 

しかし、このコードは、「ランタイムエラー5」をスローしていました:これは、コードが動作します私は実際にも、時間の経過とともに変更される可能性があります100個の+エントリを持つ配列を使用したいと

Dim ArrayColumns() As Variant 
ArrayColumns = VBA.Array(1, 2, 3) 

Worksheets("SheetName").Activate 
ActiveSheet.Range("A:Z").RemoveDuplicates _ 
Columns:=ArrayColumns, _ 
    Header:=xlYes 

、私は最初の解決策にとても満足していません。

私を助けることができますか?

乾杯、 ピーター

答えて

0

それはArrayColumns = VBA.Array(1、2、3を述べていた元の投稿を使用してArrayColumns

Sub RemDuplicates() 

Dim ArrayColumns() As Variant 
Dim Sht As Worksheet 

Set Sht = ThisWorkbook.Sheets("SheetName") 
ArrayColumns = Array(1, 2, 3) 

With Sht 
    .Range("A:Z").RemoveDuplicates Columns:=(ArrayColumns), Header:=xlYes 
End With 

End Sub 
+0

ありがとうございます。私はこのソリューションを試したと思っていましたが、それはロングアレイやその他の問題だったはずです。 PS:Sht .Range ....終了私のSht.Rangeよりも速く...?それとも、なぜこれを使ったのですか? –

+0

@PeterFrey多分それは私のスタイルのコーディングですが、私は 'With'ステートメントを使うことを好みます。将来的にこのワークシートでより多くのコーディングを実行したい場合は、参照を設定する方が簡単です。 –

+0

@ Shai Radoはなぜこれが正確に機能しますか?括弧は評価などを強制していますか? – Jbjstam

0

ジャストヘッドアップした後、前()を追加します。 )。オプションベース1がモジュールに対して設定されている場合、RemoveDuplicatesでVBA.Arrayを使用するだけです。 ArrayColumns = Array(1、2、3)が最終的に動作した理由です。[Option Baseがデフォルト0であると仮定して]

関連する問題