質問: 2 thenというのは、2行ならという意味ではないのですか? 1行でもデータがあればクリアにしてもらいたいのですが、 if .row > 0 thenみたいな感じにならないのでしょうか? 教えていただいたコードですが、この部分がわからないです。 ご教授くださいませ。
回答: こういう中途半端なコードはいじりにくいのですが、いくつか問題点を指摘させていただきます。 ・なぜ、private キーワードを入れているか? ・なぜ、メソッド名をプロシージャ名にしているか?(クラスにするなら別) private sub clear() 基本的には、コーディング・ルールとして、してはいけません。 (コーディング・ルールを質問しておいて、自分で質問したコーディングルールなどないと、私に反論したヘンな人もいましたが、それを破ったところで、ただちにエラーになるわけではありません。ただ、エラーや不具合を誘発する可能性があるというだけです。もともと、vbaは素人の人が使うものだから、ないと言えばないのですが、やはり、常識的なものはあってよいと思います。ここの掲示板では、ルール無用で、エラーも出ます、というコードのほうがベストアンサーのようです。本は出ていましたが絶版になってしまいました。) >1行でもデータがあればクリアにしてもらいたいのですが、 if .row > 0 thenみたいな感じにならないのでしょうか? そう考えるのは当然ですし自然です。そういう人は、きちんとマクロが書けるようになります。 1行でもが、2行目からという意味だとは思いますが、先頭行が、a1の1行目になる時は除外というのは、変則的だから、コードからではすぐに読めません。 ロジックとしては、以下のほうが自然なはずです。 sub clearpr1() '「タイトル行を除いて、データ行が1つでもあれば、データを削除する。」 with worksheets("abc") if .cells(rows.count, 1).end(xlup).row > 1 then .range("a2", .cells(rows.count, 1).end(xlup)).resize(, 7).clearcontents end if end with end sub もし、タイトル行を5行目においておて、その下の6行目にデータがある場合に削除する場合にも同様に応用出来ます。 .cells(rows.count, 1).end(xlup).row > 5 then .range("a6", .cells(rows.count, 1).end(xlup)).resize(, 7).clearcontents 1行目からデータがある場合は削除する、という条件なら、以下のようにするのも良いと思います。 なぜなら、.cells(rows.count, 1).end(xlup).row > 0 というのがありませんから。 sub clearpr2() '1行目からデータがある場合 with worksheets("abc") on error resume next intersect(.usedrange, .columns("a").resize(, 7)).clearcontents on error goto 0 end with end sub