- ベストアンサー
エクセル 同一セル内での消費税計算方法
セルの書式設定及び関数計算などで同一セルで数値を入力すると消費税込みの数字に変換できる方法はありませんか?に =int(「数値を入力するセル」*1.05) A1に数値を入力するとすれば、 =int(A1*1.05) とあったので A1に =int(A1*1.05)と関数を入力し A1に100 を打ち込んだのですが 105 にならず100になってしまいます。 入力方法が間違っているのでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>A1に =int(A1*1.05)と関数を入力し A1に100 を打ち込んだ 結果は当然100になります。式を入力したA1セルを100で上書きしたからです。式は参照する値のセル(A1セル)とは別のセルに入力しなければなりません。A2セルに質問にある式を入れれば105になります >同一セルで数値を入力すると消費税込みの数字に変換できる方法はありませんか? ありますがマクロが必要です。またあまり実用的ではありません。 それは通常は「入力されたら」はエクセルでは「セルが変更されたら」しか判定できませんから100と入力したら105にできますが、次にそのセルをダブルクリックしたら(=更新モードにしたら)勝手に110(105×1.05の小数点以下切り捨て)になりますよ 自分が意図しないのに数字が変わってしまう可能性があると、シートの信憑性がなくなります。 もちろん別シートなりに前の数字を書き込んでおいて、「本当に数字が変わったか」を調べる方法もありますが、それではワークシート関数で元の値と計算結果が別のセルに表示されるのと、何ら変わらなくなります。 それでもよいならマクロを書くのは簡単ですが、本来のエクセルの「便利機能」であるワークシート関数を利用するところから始められた方がいいですよ。
その他の回答 (6)
- TTak
- ベストアンサー率52% (206/389)
お望みの方法はVBAが必要です。Worksheet_Changeイベントを使えば 自動にできますが、この場合は、コードを実行するセルの範囲の指定 が必要です。でないと、シート全ての入力に対して計算を実行してし まうからです。 下記例はA列のみ、入力値に1.05を乗じるコードです。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Application.EnableEvents = False If Range(Target.Address).Column = 1 Then Range(Target.Address).Value = _ Int(Range(Target.Address).Value * 1.05) End If Application.EnableEvents = True End Sub 4行目の Range(Target.Address).Column = 1 の所で、A列なら1,B列なら2... と動作範囲を指定します。 例えば、B5:B10だけ計算を実行させたいなら、 If Range(Target.Address).Column = 2 And _ Range(Target.Address).Row >= 5 And _ Range(Target.Address).Row <= 10 Then のように条件指定します。
お礼
回答ありがとうございました。 とても参考になりました。
- mshr1962
- ベストアンサー率39% (7417/18945)
>入力方法が間違っているのでしょうか? まず自セルを参照する数式は、無理ですね。 数式設定時に循環参照とかでませんでしたか? それと、100と入力した時点で、数式が数値に置き換わってしまうので計算できません。 行なうとしたら、VBAですがCHENGEイベントは無限ループになり使えないので ボタンを押したタイミングで税込計算が妥当なところでしょう。
お礼
回答ありがとうございました。 とても参考になりました。
- gutoku2
- ベストアンサー率66% (894/1349)
関数の場合 A1セル 100 と入力 A2セル =int(A1*1.05) と入力すると A2セルの計算結果は 105 になります。 関数は、入力したセルと異なるセルに計算結果を返すのに向いています。 マクロ ※A1セルの値を1.05倍で乗算した整数(=int(A1*1.05) をA1セルに表示する Range("A2").Select ActiveCell.FormulaR1C1 = "=INT(R[-1]C*1.05)" Range("A2").Select Selection.Copy Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A2").Select Application.CutCopyMode = False Selection.ClearContents このマクロは汎用性がありませんので、実用に即した使い方の場合は別途 マクロを応用してください。 (簡単なマクロならば、新しいマクロの記録 で登録できます)
お礼
回答ありがとうございました。 とても参考になりました。
- maac777
- ベストアンサー率50% (43/86)
A1に「100」と入力した時点で元のA1に入っていた数式は「100」で上書きされてしまいます。 同一セル内に値を返すのは関数では不可能です。 VBAをお使いください。
お礼
回答ありがとうございました。 とても参考になりました。
- Idntknow
- ベストアンサー率58% (14/24)
同一セル内の処理は不明です。ごめんなさい。 今、rikopi777さんがされているのは、計算させたいセルA1を計算式に含めてしまっているので、永遠に計算続ける状態、循環参照(excel上の名称)になってしまいます。A1の結果を踏まえてまた計算しますのでぐるぐると計算し続けてしまうのです。(説明べたでごめんなさい。) ※循環参照→http://www.relief.jp/itnote/archives/001351.php エクセルでは、セル上に最後に入力したデータが残ります。 A1に、計算式を入力した後、A1に100と入力されているので、最後に入力された100が計算式を上書きして残っている状態です。 同一セル内ではなく、計算式を別セルにすると正しく計算されますので、計算式=int(A1*1.05)をB1に入力後A1に100と入力されると105がB1に結果として表示されます。 ご希望の方法じゃなくてごめんなさい。
お礼
回答ありがとうございました。 とても参考になりました。
- tama1978
- ベストアンサー率24% (57/237)
『105』が出るはずなんですが....。 なんでだろう? ちなみに、INT関数は、切り捨てで、整数を返すはずなので、『100』はないはずです。 もう一度、関数を確認してみてはどうでしょうか?
お礼
回答ありがとうございました。 エクセルをもっと勉強してみます。
お礼
回答ありがとうございました。 とても参考になりました。 ワークシート関数を利用してみます。