アプリ版:「スタンプのみでお礼する」機能のリリースについて

請求書のフォーマットを作成しています。

 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」が消えるような状態)そのようにするにはどうすればよいのでしょうか?

ご教授いただければ幸いです。

A 回答 (2件)

入力結果によって、別のセル値を消すのはVBAじゃないと出来ないと思います。



D列が入力されていればそちらを優先し、そうでない場合はC列を程度であれば E2に

=IF(D2<>"",D2*B2,IF(C2<>"",(C2*B2)*1.05,0))
    • good
    • 5
この回答へのお礼

お礼が遅くなって申し訳ありません。
ご回答いただきましてありがとうございます。

なるほど・・・セル値を消すのは関数では無理なのですね。
>D列が入力されていればそちらを優先し、そうでない場合はC列を程度であれば E2に
>=IF(D2<>"",D2*B2,IF(C2<>"",(C2*B2)*1.05,0))
IF関数を組み合わせると、似たようなことはできるのですね。
もっと私も勉強しないと・・・

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

お礼日時:2007/07/20 23:31

関数ではセルの値を消すことはできません。


数値入力セルと、表示用セル(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")に変更してください。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありません。
ご回答いただきましてありがとうございます。

このマクロ試してみました。
すごい・・・私が思っていた通りの処理ができているので
びっくりしました。
でも、やはりマクロを覚えないとこのような処理は無理なのですね^^;
今の私にとっては、マクロはまだまだレベルが高すぎるかも

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

お礼日時:2007/07/20 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A