- ベストアンサー
Excelで、特定の条件を満たすと指定のセルの値を消去するマクロ
WindowsXP環境でExcel2000を使用しています。現在A列に日付、B列にA列の日付を引数として得た曜日を表示させ、条件書式で曜日が土日ならセルの色が赤くなるように設定しています。C列には始業時間D列は終業時間がそれぞれ予定としてあらかじめ入力した状態にしてあります。そこで、上記によって取得した曜日が土日にあたるセルの右側、つまりB列およびC列の値を自動的にもしくはマクロ処理で消去したいのですが、なにか良い方法はないでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 曜日が土日にあたるセルの右側、つまりB列およびC列の値を > 自動的にもしくはマクロ処理で消去したいのですが・・・ 消すのはC、D列ではないのですか? もし、B、C列のときは、Rng.Offset(, 2) の2を1にします。 こんな感じで如何でしょうか。 Sub Test1() Dim Rng As Range For Each Rng In Range("A1", Range("A65536").End(xlUp)) If IsDate(Rng.Value) Then If Weekday(Rng.Value, 7) < 3 Then Rng.Offset(, 2).Resize(1, 2).ClearContents End If End If Next Rng End Sub
その他の回答 (4)
- ja7awu
- ベストアンサー率62% (292/464)
> このB65536 とはいったいどういう意味なんですか? B列の最終行です。 2^16(2の16乗)= 65536 B列のデータが入っているセルの最終行を調べるため、手作業で言えば、 セルB65536をアクティブにして、Ctrlを押しながら ↑キーを押して 止まったセルを求めています。 実際に操作して確認してみてください。
お礼
なるほど、そういうことでしたか。 もう少し勉強します。 おかげさまで今回の目的は完全に達することができました。どうもありがとうございました。
- ja7awu
- ベストアンサー率62% (292/464)
次のようになります。"B5" と "B65536" のところを変えただけです。 B5は、日付けの先頭セルです。 データの量は記入してあるデータ全て該当します。 Sub 土日CD列クリア() Dim Rng As Range For Each Rng In Range("B5", Range("B65536").End(xlUp)) If IsDate(Rng.Value) Then If Weekday(Rng.Value, 7) < 3 Then Rng.Offset(, 2).Resize(1, 2).ClearContents End If End If Next Rng End Sub
お礼
できました。 すごいです。 でも、このB65536 とはいったいどういう意味なんですか? 是非ご教授お願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
Sub test02() Worksheets("sheet2").Select d = Range("a1").CurrentRegion.Rows.Count For i = 1 To d If Weekday(Cells(i, "A")) = 1 Or Weekday(Cells(i, "A")) = 7 Then Cells(i, "B") = "" Cells(i, "C") = "" End If Next i End Sub
お礼
どうもありがとうございました。
- dejiji-
- ベストアンサー率38% (327/858)
消したいセルにもう一つ条件を追加すれば、 「数式を」で、 =WEEKDAY(A1,3)>=5 とし、文字を白にすれば、見かけ上は消えたことになります。ただし、ブランクではありません。
お礼
ご回答ありがとうございます。ただ、最終的に計算し、集計しているものですから、見えなくなるだけでは今回の目的を達成できません。 何か良い方法はないでしょうか?
お礼
すばらしい。完璧です。 あ、そうでした。CD列でした。 でも本当のフォーマットは、日付がB5~B35に入っていて、曜日はC5~C35、消したい列はDE列なんです。 書いていただいたプログラムから推測しようとしたんですが、私の知識では無理みたいです。恐縮ですが、教えていただけるとありがたいのですが。