2017-01-03 17 views
0

値をフィルタリングして1つのシートから別のシートにコピーしようとしていますが、私のコードの1つに固執しています。私は値として貼り付けることができないか、正しい構文を知らない。私は私が問題を抱えている部分を除いて、ここですべてをコピーするわけではない理由があるようvbaフィルタリングして値として貼り付けます

 Set ws1 = Worksheets("AT") 
    Set ws2 = Worksheets("BT") 
    lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row 
    lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 
    With ws1.Range("B2", "R" & lr1) 
     .AutoFilter Field:=1, Criteria1:="#N/A" 
     .Copy Destination:=ws2.Cells(lr2, "A") 
     .PasteSpecial (XlPastevalues, , ,) 
    End With 

コードの残りの部分は.pastespecialラインせずにフォロースルー。今は、既存のデータを最後に貼り付けているので、次のような形式はありません。データを追加するだけです。そして、既存のものにはフォーマットがあるので、私はそれを混乱させたくありません。

Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues 

また、誰かがフィルタを行うための別の方法を提案することもできます。私の現在のコードは、範囲がテーブルの場合にのみ機能するので、テーブルを作成しなければ失敗します。私のデータはA1からRまでで、ヘッダーがあります。テーブルとして設定しないと、B2からフィルタリングされ、間違ったフィルタが適用されます。下記参照。フィルターをかけてコピーすると、既存のデータにヘッダーをコピーする必要はありません。

enter image description here

答えて

1

私はそれを行うためのいくつかの方法を考えることができますが、あなたの既存のコードを変更せずに、ずっとあなただけのコピーペーストの方法を分割することができます。大きなデータセットを話しているのでなければ、それは問題ではありません。

Set ws1 = Worksheets("AT") 
Set ws2 = Worksheets("BT") 
lr1 = ws1.Cells(ws1.Rows.Count, "B").End(xlUp).Row 
lr2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 
With ws1.Range("B2", "R" & lr1) 
    .AutoFilter Field:=1, Criteria1:="#N/A" 
    .Copy 
End With 
ws2.Cells(lr2, "A").PasteSpecial xlPasteValues 
Application.CutCopyMode = False 
+0

ありがとう、それは素晴らしい作品です!範囲をテーブルとして割り当てないでフィルタを実行する方法はありますか?私は私の後半にそれを書いていますが?あなたのコードは正常に動作しますが、私はテーブルとして自分のデータ範囲を設定する必要があります。 – sc1324

+1

確かに、ちょうど同じ方法で.ListObjects( "Table1")参照を使用してください。マクロを記録すると、正確な構文が得られます。おそらく手で手に入れようとするよりも簡単です。あなたが必要とするビットだけを取るが、それは同じものに近い。私はすべてのフィルターを最初からやり直してから、見たいものをフィルタリングするのが好きです。テーブル上でコピーメソッドを実行するとき(これは100%ではないのでメモリからのものです).DataBodyRangeを使用すると、可視セルのみを明示的に表示する必要がありますが、現時点では覚えていません。 –

+0

ありがとうございます、私は件名をもっと掘り下げて、もう一度、あなたの方法はうまく動作します!ありがとう – sc1324

関連する問題