※ ChatGPTを利用し、要約された質問です(原文:Excelマクロで他シートへの抽出:エラー)
Excelマクロで他シートへの抽出:エラー
このQ&Aのポイント
Excelマクロを使用してSheet1の特定の列に特定の値がある行をSheet2に抽出表示する処理を作成しました。しかし、実行するとSheet1の内容も抽出された内容に変わってしまいます。
エラーが発生している原因は、マクロが実行されているワークシートがSheet1のままであるためです。マクロを実行する際に、マクロが対象とするワークシートを指定する必要があります。
解決方法として、マクロ内で`With Sheets('Sheet1')`のように対象とするワークシートを明示的に指定することで、Sheet1の内容が抽出されないようにすることができます。
こちらの質問
http://okwave.jp/qa/q4760155.html
を参考に、エクセルマクロを作りました。
Sheet1の10列目(J)に@が入っている行をすべて、
Sheet2に抽出表示します。コードは次になります。
Private Sub Worksheet_Activate()
With Sheets("Sheet1")
.AutoFilterMode = False
.Range("A1:N1").AutoFilter
.Range("A1:N1").AutoFilter Field:=10, Criteria1:="@"
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1")
.AutoFilterMode = False
End With
End Sub
このマクロを実行すると、確かにSheet2では抽出が行われるのですが、
同時にSheet1の内容も抽出された内容に変わってしまいます。
どこに問題があるのでしょうか。
よろしくお願いします。
補足
回答ありがとうございます。いろいろ試しました。 解決したような気がしますが、一応書かせてもらいます。 「異なっている点」 シート名が全角日本語に書き換えられています。 また抽出もとのSheet1にはフィルターが掛けられています。 新規ファイルに適当にデータを記入しこのVBAを試したら出来ました。 データにフィルターを掛けた状態で試すと、フィルターがなくなりますが出来ました。 コード末尾に.Range("A1:N1").AutoFilter Field:=10 を加えて、フィルターをつけ直すことができました。 そして最後に .Range("A1:N1").AutoFilter Field:=10 を最初のデータのコード最後に加えると、きちんとSheet1が表示されるようになりました。 .AutoFilterMode = Falseが効いていないのが原因でしょうか。 効かなかった理由がよくわかりませんが、元データにいろいろ加わっていた操作が 干渉したとしか考えられません。