• ベストアンサー

EXCELのVBAを実行したら止まってしまいます。。。

お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.2

こんにちは。 (1)オートフィルタの条件を、And条件で2つ設定しているようですが、この設定自体は正しいのですか?Orではないのですか?なんか、条件に合致するデータが出てこないような気がするんですが。 (2) Selection.SpecialCells(xlVisible).Copy で可視セルをすべてコピーしていますが、ふつうにRangeとかでコピー元を指定したほうがいいような気がします。(Rangeでコピーしても、フィルタで非表示のセルはコピーされません。) (3) ActiveSheet.Paste がおかしいと思います。Pasteメソッドはコピー元のセルとコピー先のセルの選択領域の形が違うと、ペーストできません。PasteSpecialあたりをつかうと、いいかもしれませんね。 あと、ActiveSheetに対して貼り付けるんではなくて、Selectionに対して貼り付けなのではないでしょうか? Selection.PasteSpecialとしてみるとか。

nanami0310
質問者

補足

ありがとうございます。 (1)ですが、日付が条件としてあります。5/1~5/31のデータを抜き出したいのでB2には>=2003/5/1、C2には<=2003/5/31になっています。確認しましたが、抜き出しデータは間違っていないようなので、式は多分大丈夫です。 (2)(3)ありがとうございます。早速変更してみます。

その他の回答 (1)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

AutoFilterが使えるのは 読込のシートだけなのでは? もしくは NormalのシートもSelection.AutoFilter してあげたらいいのでは?

nanami0310
質問者

補足

ありがとうございます。でも、ごめんなさい。意味がちょっと解らないのですが・・・ 現状は、Normalシートにフィルタがかかり、可視部分がコピーされ、読込シートのC3に貼付がかかるところまでは実行されています。ですので読込シート以外でもAutoFilterは使えていると思います。 どこかに「Selection.AutoFilter」を入れればいいのでしょうか?

関連するQ&A