
Private Sub Clear()
With Worksheets("abc")
With .Range("A2", .Range("A" & Rows.Count).End(xlUp))
If .Row = 2 Then
.EntireRow.Resize(, 7).ClearContents
End If
End With
End With
End Sub
シートabcの、A2から最終行まで取得。
A2からA15までデータがあれば、それらの行のG列までクリア。
というコードですが、 If .Row = 2 Thenというのは、2行ならという意味ではないのですか?
1行でもデータがあればクリアにしてもらいたいのですが、 If .Row > 0 Thenみたいな感じにならないのでしょうか?
教えていただいたコードですが、この部分がわからないです。
ご教授くださいませ。
No.3ベストアンサー
- 回答日時:
こういう中途半端なコードはいじりにくいのですが、いくつか問題点を指摘させていただきます。
・なぜ、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
No.2
- 回答日時:
>If .Row = 2 Thenというのは、2行ならという意味ではないのですか?
ご質問のそのコードでは,一つ上の行のWithで指定されているセル範囲の『一番左上に位置するセル』の『行番号』を求めています。
つまり「何が」2行なら?という理解が抜けている様子ですね。(また言葉を丁寧にすれば「2行目なら」です)
例えばA65536からEnd(xlup)したセル(キーボード操作ではCtrl+↑でジャンプしたセル)が
1)A1だったら .rowは1 なので何もしない
2)A2だったら .rowは2 なのでその2行目をclearcontents
3)A3以下だったら .rowはやはり2 なので2行目以下をclearcontents
のように作動します。
>修正点はありますか?
修正すべき問題点があるようには見えませんでしたが,実際にあなたが使ってみて修正したい動作上不都合な点が何かあったのでしょうか。
敢えてご質問の不明瞭な点を含めて指摘するならば
>1行でもデータがあればクリアにしてもらいたい
「どこに」1行でもデータがあったらですか?
実は1行目にデータがあるだけでも,その1行目もクリアしたかったのでしたら,掲示されたマクロは確かにそのようには作動しませんので直すべきとなりますね。
No.1
- 回答日時:
> With .Range("A2", .Range("A" & Rows.Count).End(xlUp))
データなしの場合の結果:RANGE("A2:A1")となり.Row =1
データ1行の場合の結果:RANGE("A2:A2")となり.Row =2
データ2行の場合の結果:RANGE("A2:A3")となり.Row =2
つまり1件でもデータがあれば.Rowは2,データなしで1となります。
この回答への補足
データが3行あれば.Row =3になりますか?
そうすれば、If .Row >1 Thenの気がするのですが、どうなんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
カンマからスラッシュに
-
ビットシフトについて
-
二分探索の平均探索回数
-
C言語の問題なのですが、分から...
-
[COBOL]日付比較 その2
-
Fortran カンマを含む数値デー...
-
散布図参照先設定時にエラーが...
-
メモ帳(テキストデータ)をExc...
-
多量のSUMIF式を軽くしたい
-
【VBA】データを入力後に,同一...
-
エクセルで2つの時系列のデー...
-
C#でデータのファイル保存と保...
-
3つの情報の論理積がわかりませ...
-
C#にてDropDownListの値を動的...
-
エクセルの関数
-
このコードの修正点はありますか?
-
ユーザーフォームのテキストボ...
-
ドラゴンクエストのぼうけんの...
-
データ取得時のエラーに関して
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
【エクセル】測定時間がバラバ...
-
多量のSUMIF式を軽くしたい
-
配列でデータが入っている要素...
-
メモ帳(テキストデータ)をExc...
-
特定のデータの抽出方法を教え...
-
ユーザーフォームのテキストボ...
-
二分探索の平均探索回数
-
EXCELVBAでSQLserverからデータ...
-
Accessで該当データにフラグを...
-
VBA 空白セルを削除ではない方...
-
この行は既に別のテーブルに属...
-
Excel VBAでのオートフィルター...
-
[C言語] コメント文字列を無視...
-
エクセルで2つの時系列のデー...
-
アクセス2000で画像データ...
-
CString型の文字列連結について
-
カンマからスラッシュに
-
VBにおいてフォーム間の変数の...
-
<VB>String→Object
おすすめ情報