- ベストアンサー
エクセルで片方のセルに入力したら、もう片方を空白にしたい。
請求書のフォーマットを作成しています。 A(タイトル)B(数量)C(税抜価格)D(税込価格)E(合計) 1 ○○ 2 1000 2100 2 ○○ 2 1050 2100 3 ○○ 2 2100 1の場合ですと、Eのセルを「2100」にしようと思ったら E=セルC*1.05*セルBになり、 2の場合ですと、Eのセルを「2100」にしようと思ったら E=セルD*セルBになります。 そこで本題なのですが、 私は3のように、税抜価格をセルCに入力、もしくは、税込価格をセルDに入力。そのどちらを行ってもセルEに「2100」という計算結果を出したいのですが・・・ (1)そのようにする場合、セルEにはどのような数式を入れればよいのでしょうか? (2)その際に、もしセルCに「1000」を入れたら、セルDは空白に、セルDに「1050」を入れたら、セルCは空白になるようにしたいのです(例えばセルCに「1000」が入力されている状態で、セルDに「1050」を入れると、セルCの「1000」が消えるような状態)そのようにするにはどうすればよいのでしょうか? ご教授いただければ幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
入力結果によって、別のセル値を消すのはVBAじゃないと出来ないと思います。 D列が入力されていればそちらを優先し、そうでない場合はC列を程度であれば E2に =IF(D2<>"",D2*B2,IF(C2<>"",(C2*B2)*1.05,0))
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
関数ではセルの値を消すことはできません。 数値入力セルと、表示用セル(C列、D列)を別にすれば関数でできないこともありませんが、請求書ということであれば余分な作業用列を表示させるのは適切ではないと思います。従ってマクロでやることになります。 以下のマクロを「シート名右クリック」→「コードの表示」で開く画面に貼り付けて下さい。シート画面に戻り、C列、D列に値を入力して見て下さい。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("C:D")) Is Nothing Then Application.EnableEvents = False If Target.Column = 3 Then 'C列なら右隣セルをクリア Target.Offset(0, 1).ClearContents Else 'D列なら左隣セルをクリア Target.Offset(0, -1).ClearContents End If Application.EnableEvents = True End If End Sub なおこのマクロはC、D列全てが処理対象になります。もしC2:D20だけを処理対象にしたい場合は、2行目のRange("C:D")をRange("C2:D20")に変更してください。
お礼
お礼が遅くなって申し訳ありません。 ご回答いただきましてありがとうございます。 このマクロ試してみました。 すごい・・・私が思っていた通りの処理ができているので びっくりしました。 でも、やはりマクロを覚えないとこのような処理は無理なのですね^^; 今の私にとっては、マクロはまだまだレベルが高すぎるかも ありがとうございました。
お礼
お礼が遅くなって申し訳ありません。 ご回答いただきましてありがとうございます。 なるほど・・・セル値を消すのは関数では無理なのですね。 >D列が入力されていればそちらを優先し、そうでない場合はC列を程度であれば E2に >=IF(D2<>"",D2*B2,IF(C2<>"",(C2*B2)*1.05,0)) IF関数を組み合わせると、似たようなことはできるのですね。 もっと私も勉強しないと・・・ ありがとうございました。