• ベストアンサー

複数のセルを同時に削除する方法

DATE関数を使って曜日をセルに表示させました。 セルA1→年(和暦入力) セルB1→月 セルC1→日 セルD1→曜日を表示する =IF(COUNT(A1:C1)<3,"",DATE(A1+1988,B1,C1)) このとき、セルA1に入力した数字をdelキーで削除したときセルB1とC1も空欄にすることが出来るでしょうか? 出来たら、関数で行いたいのですが ご存じの方教えて頂けないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。 > 式は入ってなくて、数字をリストから選択するようにしています。 となると、関数では無理かと思います。 A1のセル内容の変化によって、他のセルの内容を変更するには、あらかじめそれらのセルがA1のセル内容によって変化するような式を組み込んでおく必要があります。B1とC1がリストから選択するようになっているということは、これらは定数なので、そういう関数を仕込めないわけですよね。 何か裏技があれば別ですが、それは有識者に任せるとして、「出来たら関数で」のご要望には沿えませんがマクロを使えばごく簡単にできます。一応やり方を書いておくので、参考にしていただければ幸いです。 シートタブを右クリックして「コードの表示」を選択すると、VBAの画面が出るので、その画面の右側に以下のマクロをコピーして貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Cells(1, 1).Address <> "$A$1" Then Exit Sub  Application.EnableEvents = False  If Target.Cells(1, 1).Value = "" Then Range("B1:C1").Value = ""  Application.EnableEvents = True End Sub 貼り付けたらVBAの画面は閉じてかまいません。 これで、A1の値を削除するとB1とC1のセルも空白になります。

Kyokunan
質問者

お礼

教えて頂いたようにしたところ、見事に出来ました。 ありがとうございました。 ご質問ばかりで申し訳ありませんが、2行目も同様の処理をしたい場合は If Target.Cells(1, 1).Address <> "$B$2" Then Exit Sub Application.EnableEvents = False If Target.Cells(1, 1).Value = "" Then Range("B2:C2").Value = "" Application.EnableEvents = True を End Sub の前に追加で良いのですよね?

その他の回答 (4)

回答No.5

話はちょっとそれますが、私は・・・ A列からD列まで使用しません。入力の時もB→C列までセルを移動するのが大変なので。 A列に直接年月日を入力して、セルの書式設定を変えます。 「平成19年3月15日(木)」ならば書式は「ggge"年"m"月"d"日"(aaa)」です。 表示形式→日付→表示形式を選んだらユーザー定義(一番下)に移ります。後ろの方に@マークとか余計な文字があれば削除して(aaa)または(aaaa)を記入しOK。(aaa)は(木)、(aaaa)は(木曜日)の表示になります。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.1 & 2です。 > 2行目も同様の処理をしたい場合は 対象が単一のセルだけでないとすると、ちょっと書き方が違ってきます。先の回答の手順で、マクロを以下に置きかえてください。もし実際に年月日が入っているのが5行目までで、A5を削除したらB5,C5も削除されるというのであれば、マクロの3行目の "A1:A2" の部分を該当する範囲に書き換えてください。A列全体であれば、"A:A"でいいです。 Private Sub Worksheet_Change(ByVal Target As Range)  Dim Rng As Range, R As Range  Set Rng = Intersect(Target, Range("A1:A2"))  If Rng Is Nothing Then Exit Sub  Application.EnableEvents = False  For Each R In Rng   If R.Value = "" Then    R.Offset(0, 1).Resize(1, 2).Value = ""   End If  Next  Application.EnableEvents = True End Sub ところで、No.3の方の条件付き書式でのやり方は「なるほど」ですね。やっぱりマクロを使わない裏技がありましたか。見えなくすればいいのであれば、条件付き書式で文字色を白にするというテク、私も覚えておきます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

見た目、入ってないように見えるだけでいいなら 「書式」「条件付書式」で可能です。 その場合はB1:C1を選択して 「書式」「条件付書式」で 「数式が」「=$A$1=""」で「書式」ボタンを押して 文字の色を背景と同じ色(標準なら白)にしてください。 物理的に消すのだとしたら、A1:C1を選択してからDELするか A1の内容でマクロを実行するように設定するしかありません。 マクロは見出しを右クリックして「コードの表示」で表示される 右上の枠内に下記のコードをコピーしてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then If Target = "" Then Range("B1:C1").ClearContents End If End If End Sub 上記はA1が変更されて且つブランクの場合、B1とC1の内容を消去します。

Kyokunan
質問者

お礼

ありがとうございます。 こちらの方法も試してみましたが、期待どおりの結果になり 助かりました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

B1、C1には何らかの式が入っているのであれば、 B1 =IF(A1="","",B1の式) C1 =IF(C1="","",C1の式) としておくと、A1の値を削除するとB1とC1も空欄になります。

Kyokunan
質問者

お礼

ありがとうございます。 式は入ってなくて、数字をリストから選択するようにしています。

関連するQ&A