エクセルのマクロでセルを自動的にクリアにする方法

このQ&Aのポイント
  • エクセルのマクロを使用して、特定の条件が満たされた場合にセルを自動的にクリアする方法について説明します。
  • 休日登録のシートにおいて、特定の曜日が休日である場合、該当するセルを自動的にクリアする方法を知りたい場合、マクロを使用することで実現できます。
  • マクロを使用しなくても、数式を使用して特定の条件に基づいてセルをクリアする方法もあります。具体的には、COUNTIF関数を使用して特定の範囲に該当する値が存在しない場合にクリアするように設定します。
回答を見る
  • ベストアンサー

エクセルのマクロでセルを自動的にクリアにする方法

(休日登録)  A20~25セルを”休日”と定義  A20に9/3と入っているとします。 (シート)     A   B    C 1  日付  曜日  合計時間   2   9/1 (金)   8:30  3 9/2 (土)   8:00 ←この日が休日だとすると・・・ 4   9/3  休 ←自動で休みと入るようにしてあります。   このようなシート入力があるとして 休日を9/3と登録し、入力規則のユーザー設定で =COUNTIF(休日,A4)=0と入力し休日を判定して 休日のC4セルには入力不可に設定してあります。 ところが、9/2も休日だとあとで分かり、9/2もA21のセルに休日として追加したとします。 しかし、9/2のC3セルにはあらかじめ数字が入っているため、休日に変更しても 数字は残ってしまいます。 これをマクロの機能を使って、曜日欄が休日となったら 自動的にC3セルを自動クリアにするというような事は出来ませんか? それかマクロを使わなくても可能であれば宜しくお願いします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

補足説明ありがとうございます。 前回紹介したマクロは、"休"と新たに入力した際に、 その変化を捉えて、隣のセルを空欄にするようになっています。 つまり、マクロを貼り付ける前にすでに、 "休"と入力されている場合は機能しません。 (クリックなどで、もう一度変化させないと) もし、すでに大量のデータがあるのなら、新たにマクロを 作りましたので、標準モジュールに登録して実行してください。 B列に"休"があれば、隣とその隣のセルを空欄にします。 '=============標準モジュールに記述=========================== Sub test()  Dim LastRow As Long, r As Long    LastRow = Cells(Rows.Count, "A").End(xlUp).Row    For r = 1 To LastRow   If Range("B" & r).Value = "休" Then    Range("B" & r).Resize(, 2).Offset(, 1).Value = ""   End If  Next r   End Sub なお、前回紹介したマクロについても、 隣とその隣が空欄になるように変更しておきました。 (エラー処理も1行追加してます。  前回のものは削除してください。不具合が出ます。) '=============シートモジュールに記述=========================== Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub  If Target.Column <> 2 Then Exit Sub  Application.EnableEvents = False   If Target.Value = "休" Then Target.Resize(, 2).Offset(, 1).Value = ""  Application.EnableEvents = True End Sub

level42195
質問者

お礼

返事が遅れましたが、回答有難うございました。 ちなみにシートモジュールに記述した場合は マクロ→実行をさせる必要があるようですね。 まだまだマクロは自動記録プラスαくらいしか出来無く モジュールに記述されたものを応用しようとすると難しいので これから少しずつ覚えていきたいと思います。

その他の回答 (1)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

>これをマクロの機能を使って、曜日欄が休日となったら >自動的にC3セルを自動クリアにするというような事は出来ませんか? 例のように、B列に休と入力確定されたら、右横を空欄にします。 '=============シートモジュールに記述=========================== Private Sub Worksheet_Change(ByVal Target As Range)    If Target.Column <> 2 Then Exit Sub 'B列の変化以外はスルー    Application.EnableEvents = False   If Target.Value = "休" Then Target.Offset(, 1).Value = ""  Application.EnableEvents = True   End Sub >それかマクロを使わなくても可能であれば宜しくお願いします。 もし、見た目だけで良ければ、条件付書式で、 C列を選択し、上部メニューで 「書式」→「条件付書式」 「数式が」にして「=B1="休"」と入力し、 「書式」ボタンを押して「フォント」の色を「白」にして「OK」 でどうでしょうか?

level42195
質問者

補足

ka_na_deさん 早速の回答ありがとうございます。 見た目だけではなく、入力された日数でアベレージを算出しているので マクロの方の回答を参考にさせてもらいます。 ただ、実際にやってみたところ ”B列に入力確定されたら”という上記のマクロだと ”休”と入った曜日欄のB3セルをマウスでクリックするまで C3セルが空欄とならないようなので、 クリックしなくても、B列に”休”と表示された時点で空欄と変わるようにするには どのようにしたら良いでしょうか? また、その際、右隣のD3セルも同時に空欄にするには Then Target.Offset(, 1). のところをどのように変えるとうまくいきますか? C3、D3セルでなく、B列に”休”と入ったらC列&D列というように列単位で空欄にするというものでも良いです。 宜しくお願い致します。

関連するQ&A

  • セルの色をマクロで判定

    セルの色をマクロで判定したいのですが、知恵をお貸し下さい。 シート1のA1セルからA40と      C1セルからC40と      E1セルからE40セルを確認しセルが黄色だったら シート2のF1セルからF40      H1セルからH40      J1セルからJ40の同じ配列の所(A1だったらF1)のセルを赤色にしたいのですが、どのようなマクロを組むといいのでしょうか、どうか宜しくおねがいします。

  • エクセルでのセル自動クリア

    こんにちは。エクセル2000の質問です。 特定セル(以後項目セル)の入力を消した時に、関連するすべてのセル(同じ行のセル)の入力を自動的に消したいのです。 関数で自動的に計算するセルは、項目セルがブランクだったら時は「0」になるようにし、ユーザー定義で0を非表示にすることはできています。 入力する人が記入する箇所のみ、項目セルの入力を消すことでクリアしたいのです。 できればマクロを使わずに実現したいのですが、できますか? マクロ以外では不可能の場合はマクロでどうしたらよいでしょうか? よろしくお願いいたします。

  • エクセルでセル入力とセル出力の自動化

    おそらくマクロで簡単に出来ることだと思うのですが、マクロを使ったことが一度もなくやり方がわからなく苦慮しています。 やりたいことは、簡単に述べると、 (1)セルA1に数字を入力(変数)すると、セルA2に計算結果が出る。 [つまり、A2にはA1を変数とする関数が入っている] (2)セルB1、セルB2、セルB3、…にはそれぞれ数値が入力されている。 [変数リスト] (3)変数リストにあるB1の数値をA1に入力して、その結果のA2をC1に書き出す。さらに、B2をA1に入力して、その結果のA2をC2に書き出す。以下、これを変数リストすべてについて実行する。 という感じのことです。この程度のことなら、初めから関数化してしまえばおしまいなのですが、実際A2の出力でやっている計算はシートを複数使うような大規模な計算なので、関数化するのは面倒です。そこで、手動でいちいち変数の入力と結果の出力を実行しておりましたが、それはそれで入力ミスや出力ミスもしそうですし、自動化できるならそれに越したことはありません。 そういうわけで、上記の作業を自動化する方法をご教授いただけたらと思います。どうぞよろしくお願いします。

  • エクセルのマクロでセル選択するには

    初心者です! エクセルのSheet1に30箇所のセルをマクロで選択したいのですが、 たまに選択するセルが変わります。 そこで、Sheet2のA1から下へSheet1の選択する位置を「B2」「C5」「D10」・・・としてマクロで一発で30箇所のセルを選択する方法を教えてください Sheet2のA1から下へ入力するセル位置はその都度変化します。 変化したときにそのマクロを実行すると選択できるといいのですが!! よろしくお願いします。

  • マクロで可視セルのみの削除

    A行に数字を入れ、B行にA行同列セルの数字に対して 数値を返す数式を入れています。 B行は非表示にしています。 (C・D行、E・F行・・・とも同じ処理) 数字を入力する範囲(A、C、E・・・)を選択し、 入力されている数字を消去するようマクロを組みました。 (範囲選択→ツールの編集→ジャンプ→可視セルを選択後、Delete) これはうまく作動します。 が、数式が壊れるのを防ぐ為、念には念を・・・と、 入力範囲部分はセルの書式設定で保護ロックを外し、 シートを保護しました。 そうすると、保護されているからだめ!と エラーが出て、マクロが作動しません。 (可視セル選択部分にデバッグがでます。) ・非表示のセルがある ・一部を除きシートを保護している 状態で、マクロで可視セルのみ削除することは不可能なんでしょうか? 宜しくお願いします。

  • エクセル2013 マクロの最大値

    エクセル初心者です。セルをダブルクリックしたときに、最大値に+1の値をセルに自動入力したいのですが・・・。まず、シート1のC列とシート2のC列から最大値を探し、その値+1の数字を入力したいです。現在の時点で3、4、5の列にデータが入力されているのでC6をダブルクリックしたときに、マクロ実行されるようにしたいです。データは、増えていくのでC6は固定ではありません。C列の未入力のセルをダブルクリックしたときに、自動入力されるということです。 おわかりの方がいらしたら、ご教示お願いいたします。

  • Excelマクロ 曜日自動入力方法

    マクロ初心者です。 こちらのサイトから日付の自動入力の方法がわかりました。 Sub Macro1() Dim f As String f = ActiveCell.NumberFormat ActiveCell = Now End Sub ↑の右セルに曜日を自動入力したいのですが・・・ 追加するコード?を教えてほしいです。 (選択したセルA1には"7/24"をセルB1"土" のマクロ)

  • EXCELの関数式内に他のセルの値を取り込む方法?

    EXCEL2002、OSはWIN XPです。よろしくお願いします。 セルのA1にランダムな数字が入ります(実際はマクロでシートの最下行が書き込まれるようになっています。) セルのB1に以下のような式で「xx」の部分にA1の値を入れたいのですが、どのようにすればよいのでしょうか? =countif(C1:Cxx,"") つまりセルB1にはC1からその時使用されている最下行までの空欄セル数を常に表示したいのです。マクロでやれば簡単だと思いますが、できれば関数で表示させたいと思っています。よろしくお願いします。

  • マクロで色の設定がしたいのですが・・・

    こんにちは。 マクロで色の設定をしたいのですが、どうにもうまくいきません。 やりたいことは Sheet1に3×3の9つのセルを設定する Sheet2のA列に9行の枠を作る あらかじめ1は黒、2は灰色、3は・・・と1~15まで15色の色設定をしておく Sheet2の枠内に1~15の数字を入力したときに、Sheet1の9つのセル内の色が変わるようにしたいのです。 また、Sheet2のA1~A9がSheet1では3×3のセル設定なので 縦方向でも横方向でも進む順番は構わないのですが、 例えばSheet2:A1~A3=Sheet1:A1~A3、Sheet2:A4~A6=Sheet1:B1~B3、Sheet2:A7~A9=Sheet1:C1~C3と設定することは可能ですか? 現段階では、シート内でセルに直接数字を打ち込むと入力されたセルの色が変わるまでは出来たのですが、反映させることが出来ません。 宜しくお願い致します。

  • Excelで連続印刷をするマクロ

    Excelでデータベース的な使い方をしています。 「データ」シートにたくさんのデータがあり, 「レポート」シートのA1セルに入力した数字に該当するデータをVLOOKUP関数で読み込んでいます。 それを連続印刷するときに, 現在は For n = 1 To 135 Range("A1").Select ActiveCell.FormulaR1C1 = n ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Next n End Sub というマクロで実行させています。 (ちなみにマクロの知識がほとんどなく 「新しいマクロの記録」を利用して作ったため,ほとんど意味は分かっていませんが・・・) このマクロでも印刷できるのですが, このままだとデータが 1 ~ 135に固定されてしまいますよね。 実際はデータ数が変動するので,そのたびにマクロの数字を変えています。 そこで考えているのが 新たに「設定」シートを作成して そこのiとjのセルに数字を入力することで,自動的に マクロが n = (iに入力した数字) To (jに入力した数字) となるようにした方が便利だと考えています。 あまりマクロについての知識がないくせに ほんのちょっとの工夫でできるような気がして・・・ あれこれ試してみたけどできません。 できれば今のマクロを根本的に変えるのではなくて 少しの変更とか追加とかでできるようにしたいのですが可能でしょうか? ぜひ 教えてください。よろしくお願いします。

専門家に質問してみよう