プロが教えるわが家の防犯対策術!

セルの書式設定及び関数計算などで同一セルで数値を入力すると消費税込みの数字に変換できる方法はありませんか?に
=int(「数値を入力するセル」*1.05)
A1に数値を入力するとすれば、
=int(A1*1.05)
とあったので A1に =int(A1*1.05)と関数を入力し A1に100 を打ち込んだのですが 105 にならず100になってしまいます。
入力方法が間違っているのでしょうか?

A 回答 (7件)

>A1に =int(A1*1.05)と関数を入力し A1に100 を打ち込んだ


結果は当然100になります。式を入力したA1セルを100で上書きしたからです。式は参照する値のセル(A1セル)とは別のセルに入力しなければなりません。A2セルに質問にある式を入れれば105になります

>同一セルで数値を入力すると消費税込みの数字に変換できる方法はありませんか?

ありますがマクロが必要です。またあまり実用的ではありません。
それは通常は「入力されたら」はエクセルでは「セルが変更されたら」しか判定できませんから100と入力したら105にできますが、次にそのセルをダブルクリックしたら(=更新モードにしたら)勝手に110(105×1.05の小数点以下切り捨て)になりますよ

自分が意図しないのに数字が変わってしまう可能性があると、シートの信憑性がなくなります。

もちろん別シートなりに前の数字を書き込んでおいて、「本当に数字が変わったか」を調べる方法もありますが、それではワークシート関数で元の値と計算結果が別のセルに表示されるのと、何ら変わらなくなります。

それでもよいならマクロを書くのは簡単ですが、本来のエクセルの「便利機能」であるワークシート関数を利用するところから始められた方がいいですよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
とても参考になりました。
ワークシート関数を利用してみます。

お礼日時:2008/03/05 21:33

お望みの方法は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

のように条件指定します。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
とても参考になりました。

お礼日時:2008/03/05 21:27

>入力方法が間違っているのでしょうか?


まず自セルを参照する数式は、無理ですね。
数式設定時に循環参照とかでませんでしたか?
それと、100と入力した時点で、数式が数値に置き換わってしまうので計算できません。

行なうとしたら、VBAですがCHENGEイベントは無限ループになり使えないので
ボタンを押したタイミングで税込計算が妥当なところでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
とても参考になりました。

お礼日時:2008/03/05 21:31

関数の場合


  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

このマクロは汎用性がありませんので、実用に即した使い方の場合は別途
マクロを応用してください。
(簡単なマクロならば、新しいマクロの記録 で登録できます)
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
とても参考になりました。

お礼日時:2008/03/05 21:35

A1に「100」と入力した時点で元のA1に入っていた数式は「100」で上書きされてしまいます。


同一セル内に値を返すのは関数では不可能です。
VBAをお使いください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
とても参考になりました。

お礼日時:2008/03/05 21:36

同一セル内の処理は不明です。

ごめんなさい。
今、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に結果として表示されます。
ご希望の方法じゃなくてごめんなさい。
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
とても参考になりました。

お礼日時:2008/03/05 21:39

『105』が出るはずなんですが....。


なんでだろう?
ちなみに、INT関数は、切り捨てで、整数を返すはずなので、『100』はないはずです。
もう一度、関数を確認してみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
エクセルをもっと勉強してみます。

お礼日時:2008/03/05 21:41

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

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