• ベストアンサー

Excelで、特定の条件を満たすと指定のセルの値を消去するマクロ

WindowsXP環境でExcel2000を使用しています。現在A列に日付、B列にA列の日付を引数として得た曜日を表示させ、条件書式で曜日が土日ならセルの色が赤くなるように設定しています。C列には始業時間D列は終業時間がそれぞれ予定としてあらかじめ入力した状態にしてあります。そこで、上記によって取得した曜日が土日にあたるセルの右側、つまりB列およびC列の値を自動的にもしくはマクロ処理で消去したいのですが、なにか良い方法はないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

> 曜日が土日にあたるセルの右側、つまり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

yamashiro
質問者

お礼

すばらしい。完璧です。 あ、そうでした。CD列でした。 でも本当のフォーマットは、日付がB5~B35に入っていて、曜日はC5~C35、消したい列はDE列なんです。 書いていただいたプログラムから推測しようとしたんですが、私の知識では無理みたいです。恐縮ですが、教えていただけるとありがたいのですが。

その他の回答 (4)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.5

> このB65536 とはいったいどういう意味なんですか?  B列の最終行です。 2^16(2の16乗)= 65536 B列のデータが入っているセルの最終行を調べるため、手作業で言えば、 セルB65536をアクティブにして、Ctrlを押しながら ↑キーを押して 止まったセルを求めています。 実際に操作して確認してみてください。

yamashiro
質問者

お礼

なるほど、そういうことでしたか。 もう少し勉強します。 おかげさまで今回の目的は完全に達することができました。どうもありがとうございました。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

次のようになります。"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

yamashiro
質問者

お礼

できました。 すごいです。 でも、このB65536 とはいったいどういう意味なんですか? 是非ご教授お願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

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

yamashiro
質問者

お礼

どうもありがとうございました。

  • dejiji-
  • ベストアンサー率38% (327/858)
回答No.1

消したいセルにもう一つ条件を追加すれば、 「数式を」で、 =WEEKDAY(A1,3)>=5 とし、文字を白にすれば、見かけ上は消えたことになります。ただし、ブランクではありません。

yamashiro
質問者

お礼

ご回答ありがとうございます。ただ、最終的に計算し、集計しているものですから、見えなくなるだけでは今回の目的を達成できません。 何か良い方法はないでしょうか?

関連するQ&A

  • Excel の『条件付き書式』について

    いつもお世話になっております。 Excelで以下のような表を作成しています。 『条件付書式』について教えてください。  列A  列B  列C   日付  曜日  空白セル 列Aに日付を入力して、その日が土日であったらセルに網掛けをするように設定しています。 列Bは、列Aに日付を入力すると自動で曜日を表示するようにし また、土日であったら自然に網掛けになるようにしました。 (列A・列Bをドラッグして『条件付書式』で設定)  『条件付書式』は…     条件1=WEEKDAY(A○,2)=7     条件1=WEEKDAY(A○,2)=6 …で設定。 列Cも同様にしたいのですが、どうもうまくいきません。 列A・列B・列Cとドラッグさせて『条件付書式』にしたのですが 土日でなくても網掛けになってしまいます。 列Cも土日であれば網掛けにする方法があれば アドバイスいただけますでしょうか。 (自動では無理なようでしたら地道に網掛けしていくとします。) よろしくお願い致します。

  • Excel 条件付き書式◆ 同じ行の特定のセルを指定するには

    A列には、ずらーっと、日付の数値が入っています。 B列には、「その日の行動スケジュール」の文字列が入っています。 ”今日”になったら、その日付に該当するB列の「行動スケジュール」だけ文字の色を変えたいと思いました。 このとき、列全体を範囲指定して、「条件付き書式」を設定しようと思ったのですが、数式の書き方がわかりません。 まず、B列のBのところをクリックして列全体を指定した上で、「条件付き書式」の設定のダイアログを出し、「数式が」を選択すればいいだろうというところまではわかります。 しかし、数式において、どのように記述すると、”B列の特定のセルと同じ行にあるA列のセル”だけを選択できるようになるのかがかわかりません。 おそらく、下の●のところに、同じ行にあるA列のセルだけを指定するための記号が入ると思うのですが、手本がどこにも見つかりません。 =●●=today()

  • Excel 条件付書式で、セルに色を付けたいのですが

    エクセルで、チェック表を作成しました。 1行目には日付を2行目には曜日が入るようになっています。 A列には、各チェック項目が入ります。 この様な表を作成し、1ヶ月単位でチェックを行います。 作成した表を、1ヶ月ごとに曜日と日付を更新する必要があります。 土日のみ自動的にセルに色がつくようにしたいのですが、上手くいきません。 現在、条件付書式にて、曜日の欄には色がつきます。 また、他のセルは、「次の場合に等しくない」で曜日の欄が土日の場合に、色がつくようにはなりました。 しかし、日付の欄や、セルに予め文字が入っている場合、この条件付書式が上手く機能しません。 何か良い手はありますか?(文字を消すと上手く機能します)

  • EXCELで セルの値が○○の場合 条件付書式??

    おはようございます。 会社の勤怠をエクセルで作っているのですが、質問があります。 A10のセル(始業時間)が9:00からで、 B10のセル(終業時間)の値が22:00以上の場合、 E10のセル(労働時間)の値に(13H)と、値に()が付くようにしたいのですが、どのようにすれば良いでしょうか? 条件としては、終業時間が22:00の場合だけに、()が付くようにしたいです。 ※深夜残業(22:00)を超えた場合だけに、()を付けたいのです。 宜しくお願いいたします。

  • エクセルの条件付書式について質問です。

    図のような毎月手書き入力するシートが多数あります。 A1のセルにその月の1日の日付を入力してB3に=A1、C3にB3+1・・・ で条件付書式aaaで曜日表示するところまではできました。 さて、初心者の私は毎月土日をせっせと塗りつぶしていましたが・・・ 条件付書式で3の行(列?)に土、日が表示されたらその列(行?)は灰色に塗りつぶす ことができるのではないか?と気づきました。 ところがC3に「土」と表示されたことに対してC4を塗りつぶすなど私には想像もつきません。 C4の条件付書式は「数式がIF(C3="土""日",・・・・・・)」みたいな感じですか? また全部のセルにいっぺんにその書式を設定することはできますか? ちなみにバージョンは2003です。

  • エクセルの条件付き書式について教えて下さい

    エクセルシート内A-D列に日付と文字列の記入があり (A:文字列 B:日付 C:日付 D:文字列) Bの日付よりCの日付のほうが早く、かつD列に文字の記入がある場合Aのセルの色を変更するよう 条件付き書式で設定したいと考えているのですが、可能でしょうか。 詳しい方、ぜひ御教示ください。 【例】こんな場合にAのセルの色を変更したいです A B C D あ 8/1 7/30 い

  • エクセル2000 異なるセルをくっつけて表示

    こんばんは。 毎度どうもすみません。 「エクセル2000 異なるセルをくっつけて表示」について質問します。 次のような文字があり、日付、曜日、時間は書式設定により表示されてます。(設定を解除すると数字の羅列になる。)   A列  B列  C列   D列   E列 1 09/20 木  10:00  山田  名古屋 2 この表あるそれぞれの文字をひとつのセルに改行して表示させるにはどうすればいいでしょうか?  09/20  木  10:00 に  山田 さん 名古屋 で 会いましょう 上記のようにしたいのです。 「&」記号とchar(10)記号を試してみましたが、日付などが数字になりうまく表示されません。関数では無理でしょうか? やはりVBAかな。 方法があれば教えてください。 

  • エクセルで特定のセルをマクロで色づけする

    お世話になります。 出勤チェックを集計するためのファイルを作っています。 説明がわかりにくいかもしれず申し訳ありません。 添付画像のカレンダーシートから年月を選択。 集計シートの日付は、カレンダーシートから取得した年月日を リンク貼り付けし、表示形式を日付と曜日にしています。 例えば、2011年9月と選択した場合、 日付の1日のところは、(画像でセル番号が抜けましたが、B4です) =DATE(カレンダーシート!C4,カレンダーシート!C5,1) 曜日のところは、=B4 となっています。 この状態で、土日の休日は、集計シートの朝、帰りのセルを空欄にしたいのです。 (出勤日計算を、”朝”の数でcount関数で出しているため) 単純に、IF文で曜日が土日なら空欄にする方法は、 中に入っている数式が日付なので、できません。 何か良い方法をアドバイスいただければありがたいです。 なお、できるだけ、マクロやVBAなしで関数のみで実現できると助かります。 よろしくお願い申し上げます。

  • Excel の関数で指定条件座標の値を返す方法

    Excel を使い、複数の特定条件を満たした場合のみ、該当するセルの値を返す方法を教えてください。 下記の条件に基づいた処理をExcel関数で行うことはできるのでしょうか? VBAを使わなければ、目的とするデータの取得は無理でしょうか? ********************************************* B3に本日の日付の「月」:「=today()」書式=m"月" C3に本日の日付の「日」:「=today()」書式=d"月" A6~14の列に「月」 B5~AF5の行に「日」 B6~AF17には、ランダムな英数字を記載 【G20のセル】  ・本日の日付「=today()」に合致する座標に入力されている値を表示させる。    検索条件: B5:AF5=$D$3 (日) & A1:A17=$C$3 (月) **********************************************

  • エクセル2010の書式の条件設定を他のセルに

    excel2010を使用しています ----------------------- A列   B列 Aさん  50 Bさん  60 Cさん  80 Dさん  50 ----------------------- エクセルの表は上記のようになっています B列を選択しホーム>条件付き書式>カラースケール>選択 をすると B列に色が付くのですが この色をA列の名前のセルに色が付くようにしたいのですがどう設定すればいいでしょうか?

専門家に質問してみよう