[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『1+1を2と認識する方法』(カズ)
Excel2007 WindowsXP です。
A B C
1 2 600 1200
2 1+1 600 1200
3 2:2 600 2400
上記の様にA列に数量を入力し B列に値段を入れると
C列に合計が表示する様に作っていますが、
2列目とか3列目とかは、C列が計算されません。
A列に1+1 2:2とか入れても 2 と4と認識して
上記みたいにC列に合計が計算できる方法はありませんか?
ちなみに、見積り等で使っています。
よろしくお願いします。
>1+1 2:2とか入れても 2 と4と認識して
その2つの記号で全種類なのですか?
(半平太) 2010/07/24 16:15
これを応用すれば出来ると思います。 ↓ [[20100531103849]]『セルに入力した四則演算("+","-","*","/")を使って別のセルで+計算をさせたい』
注: 「:」を 「+」 に置き換えるのはSubstitute() で。
(半平太) 2010/07/24 16:19
カズです。
現在のところ 1+1 とか 1:1 とか 1対1とかです
ユーザー定義関数を作ってしまえばよいと思いますけどね!!
仕様は、
関数名 editcalc
機能 指定された計算式を編集し、その結果を評価する
呼び出し形式 editcalc(calcstr[,eddatalist])
引数説明 calcstr ----- 編集対象となる文字列を指定します eddatalist calcstr内の文字列の eddatalist(n,1)をeddatalist(n,2) に置き換えて評価する eddlistは、eddatalist(n,1)とeddatalist(n,2)の一対で使用すること calcstrに変更がなければこの引数は必要ない 使用例 calcstr="5×2÷4" のとき editcalc(calcstr,{"×","*";"÷","/"}) で、2.5と評価される
セルA1に "2:2" b1に 600 とあるときに =editcalc(A1,{":","+"})*B1 とう数式は、2400と評価されます。
標準モジュールに
'====================================================================== Function editcalc(ByVal calcstr As Variant, Optional ByVal eddata As Variant) As Variant Dim g0 As Long Dim wk As Long Dim ans As Variant On Error Resume Next If Not IsMissing(eddata) Then ans = eddata wk = LBound(ans, 2) If Err.Number <> 0 Then ReDim ans(1 To 1, 1 To 2) ans(1, 1) = eddata(LBound(eddata)) ans(1, 2) = eddata(LBound(eddata) + 1) End If For g0 = LBound(ans, 1) To UBound(ans, 1) calcstr = Replace(calcstr, ans(g0, LBound(ans, 2)), ans(g0, LBound(ans, 2) + 1)) Next End If editcalc = Application.Evaluate("=" & calcstr) On Error GoTo 0 End Function
これを今回の事象に使うことを考えると、C列に
=editcalc(A1,{":","+";"対","+"})*B1
こんな数式で処理できると思います。
仮に "2と3" は 5 と評価したい なんて仕様が追加されたら、数式を
=editcalc(A1,{":","+";"対","+";"と","+"})*B1
このように変更すればよいという仕様です。
もっとも、仕様追加で数式の変更も必要になるので、 {":","+";"対","+";"と","+"} ここを名前の定義で 変換リスト という名前で 登録すれば、
数式は、
=editcalc(a1,変換リスト)
ですみますし、仕様の追加・変更は、変換リストで行い、数式の変更が要りません。 また、eddatalistには、例えば、h1:i3なんていうセル範囲も指定できます
h i
1 : + 2 対 + 3 と +
=editcalc(A1,$H$1:$I$3)*B1
VBAを知っているなら、試してみてください。
ichinose
ありがとうございました。
うまくいきました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.