|
▼lawry さん:
こんにちは
まず、ご提示のコードにインデントを付けますと見やすくなります。
で、この見やすくしたコードをつらつら眺めますと、修正すべきところ、改善できるところが
見えてきます。
まず、With Worksheets("sheet1")
これ自体は、大変結構なことですが、Withでシートを修飾した後のEnd With までの
セル領域には頭に .(ピリオド)をつけて、初めて有効になります。
ところが、ご提示のコードは、たとえば Range(Cells(i, 1) 。
これではWithが全く活かされていません。たまたま、マクロを実行するときにアクティブだった
シートのセルになります。仮にSheet1以外がアクティブな状態で実行すると、とんでもないことに
なりますね。全て .Range(.Cells(i, 1) といったように記述することが必要です。
特定の文字列を含む行を別シートに抽出するというテーマですから、通常ならAdvancedFilterを
用いるのが効率もいいとは思いますが、今回の場合、特定列が空白だったらSheet2。
ただし、その行が全て空白ならコピー対象からはずすということでしょうから、
・特定文字列があるものを抽出する部分はAdvancedFilter、行全体が空白ではなく、特定列が
空白だったらSheet2という部分のみをループ処理させる手もありますね。
あ、(私が誤解していないとすれば)、Sheet2へコピーしてからSheet2の空白行を削除するより
1行全体が空白ならコピーからはずすというやり方のほうがよろしいですよ。
|
|