値をフィルタリングして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からフィルタリングされ、間違ったフィルタが適用されます。下記参照。フィルターをかけてコピーすると、既存のデータにヘッダーをコピーする必要はありません。
ありがとう、それは素晴らしい作品です!範囲をテーブルとして割り当てないでフィルタを実行する方法はありますか?私は私の後半にそれを書いていますが?あなたのコードは正常に動作しますが、私はテーブルとして自分のデータ範囲を設定する必要があります。 – sc1324
確かに、ちょうど同じ方法で.ListObjects( "Table1")参照を使用してください。マクロを記録すると、正確な構文が得られます。おそらく手で手に入れようとするよりも簡単です。あなたが必要とするビットだけを取るが、それは同じものに近い。私はすべてのフィルターを最初からやり直してから、見たいものをフィルタリングするのが好きです。テーブル上でコピーメソッドを実行するとき(これは100%ではないのでメモリからのものです).DataBodyRangeを使用すると、可視セルのみを明示的に表示する必要がありますが、現時点では覚えていません。 –
ありがとうございます、私は件名をもっと掘り下げて、もう一度、あなたの方法はうまく動作します!ありがとう – sc1324