• ベストアンサー

オートフィルタをかけるマクロ

A12からA50に表示されている内容でB列にオートフィルタをかけ、印刷をする というマクロですが、 Selection.Autofilter field:=2, Criteria1:=Range("A12") Activesheet.Printout を39回コピーし、"A12"の部分を"A13"............"A50"に変えていきました。 本当はもっとスッキリできると思うのですが、そこがまだよくわかりませんので どなたか教えていただけないでしょうか。 A列は必ず50までデータがあるとは限りません。 エクセル2003使用の初心者です。 よろしくお願いします。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

Dim i As Integer For i = 12 to 50 If Range("A"&i) Is Null Then Exit For Selection.Autofilter field:=2, Criteria1:=Range("A"&i) Activesheet.Printout Next i 又は Dim RG As Range For Each RG In Range("A12:A50") If RG Is Null Then Exit For Selection.Autofilter field:=2, Criteria1:=RG Activesheet.Printout Next RG

graycat222
質問者

お礼

お礼が遅くなり申し訳ありません。 おかげさまでうまくいき、非常に助かりました。 変数をうまく使えるように勉強していきたいと思います。 またよろしくお願いします。

その他の回答 (1)

回答No.2

「B列にオートフィルタをかけ、印刷をする」 この操作を「マクロの記録」で記録しておき、 記録したマクロを実行してみてはいかがでしょうか。 また、記録されたマクロはソースコードになっているので、 気に入らない箇所を修正して、より使い勝手のよいものに することもできます。 マクロを最初からプログラムするのは大変だし、 またオブジェクトの名前などを知っていないと プログラミングも難しいと思います。 私も昔は色々なマクロを組んで経理業務に 使っていましたが、まず自動記録で基本部分を 作ってから、部分的に修正していました。

graycat222
質問者

お礼

ありがとうございました。 Selection.Autofilter field:=2, Criteria1:=Range("A12") Activesheet.Printout は自動記録したマクロです。 自動記録だけではマクロが長くなるためもっとスッキリさせる方法を質問したのです。 B列は可変なので、何行で終わるかわかりませんし。

関連するQ&A