2017-11-10 17 views
0

私は、ユーザーからの入力リストの値のセットをチェックするマクロを作成しています。私のソースリストの値がユーザーの入力にない場合は、別のスプレッドシートにコピーする必要があります。マクロはエラーなしで実行されますが、結果はフィルタリングされません。それはすべてをコピーするだけです。 これはコードです:あるスプレッドシートから別のスプレッドシートにデータを検索する

Sub CheckRow() 
For i = 2 To Application.CountA(Worksheets("Source").Range("A:A")) 'Loop through rows 
    Set rgFound = Worksheets("Input").Range("A:A").Find(Worksheets("Source").Range("A" & i).Value, LookAt:=xlWhole) 'Find the value from the source list in the Input List 
If rgFound Is Nothing Then 'If there is no match it goes to output 
    Worksheets("Output").Range("A" & Application.CountA(Worksheets("Output").Range("A:A")) + 1).Value = Worksheets("Source").Range("A" & i).Value 'Copy the value beow any existing values 
End If 
Next i 
End Sub 

私はあなたが提供している任意の提案を高く評価することでしょう。

答えて

0

修正済み。 Findメソッドは、Valueと= Valueが2つの異なるものだと考えているようです。すべての数式セルをプレーンテキストに変更すると、私のコードは魅力的に機能しました。

0

条件はIf Not rgFound Is Nothing Then(コードにはNotがありません)です。基本的には、Findメソッドは何も見つからないため、すべてがコピーされます。

また、コードシートの上部にOption Explicitを使用することをお勧めします。これはFind(Worksheets("Source").Range("A" & j)に変数jの使用を警告します。私はあなたがA & iを探していると思います。しかし、jは0の値を持つように見えるので、行0がないため、コードは何もコピーしません。Option Explicitを使用すると、すべての変数を宣言して、コードを読むときにこのようなゲームを推測する必要がなくなります。あなたはそれをほとんど読んでいるので、あなたは改善の最優先の受益者でもあります。

+0

「j」については、私の悪い。私のコードではこれが別のループの中に入れ子になっているので、私はここに表示するために "i"に変更するつもりでした。 – Variax