[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaで算式をセルから読み取って計算』(HISAO)
vbaで算式をセルから読み取って計算出来ないでしょうか。
またまた教えて頂けないでしょうか。
テーブルの或るセルに書かれた算式、例えばA+B+Cと書かれていれば
A列〜C列までの合計、A+Bと書かれていればA列とB列を合計計算する
マクロは書けないでしょうか。
目的は 例えば残業手当の計算で 基本給のみを計算基礎とするケース、
他の手当を計算基礎に含めるケースを テーブル上で指示したいのですが
宜しくお願い致します。
Excel-VBA では
MsgBox Cells(1,3).FormulaR1C1
のように数式を表示させたり、
Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=SQRT(R1C1)"
のように数式を変更したりできます。
(kazu)
kazuさん。すみません、質問の説明が拙かったようですね。
マクロで算式を表示させたり変更させるのでなく
例えば下記のようなテーブルがあるとします。
例えばrange("G1")にA+Bと入力してあったら range("D1")に 5 を出し
range("G1")にA+B+C と入力してあったら range("D1")に 13 を出したいのです。
("G1")にA,("H1")にB,("I1")にCと入れる方法でも良いのですが。
宜しくお願いします。
マクロではないんですが、よろしいでしょうか。 Sheet1と言うシートで作業するとして・・・。 まず、どの列でもいいので一行目のどれかのセルを選択した状態で
メニュー「挿入」→「名前」→「定義」で名前を次のように定義します。 名前 参照範囲 A =Sheet1!$A1 B =Sheet1!$B1 CC =Sheet1!$C1 CALC =EVALUATE(Sheet1!$G1)
セルG1へA+Bと入力して D1へ「=CALC」と入力するとセルG1へ入力した内容を計算します。
ただ、名前に「C」の一文字だけというのが使えません。 とりあえずCCにしてますからA+B+Cの部分は「A+B+CC」にしないと計算してくれません。 項目がA列B列C列G列、それぞれに固定であれば、「=CALC」を入力した行のG列の算式を 計算してくれます。
「A+B/2」のような計算も許容してくれます。 (KAMIYA)
時間があったので、マクロも作ってみました。
Sub test() Dim r As Long Dim A As Range, B As Range, C As Range r = Selection.Row Set A = Cells(r, 1) Set B = Cells(r, 2) Set C = Cells(r, 3) Cells(r, 4).Value = Evaluate(Cells(r, 7).Text) End Sub
こちらの場合はA+B+CはOKです。
単独セルを選択していた場合、同じ行のG列に入っている算式を対象に計算し、 D列のセルへ答えを返します。 複数行にまたがるセルを選択している場合はうまくいきません。 行違いのセルを選択していてもエラーになると思います。
計算させる方法としてはHISAOさんが途中に書いているように、 G1にA、H1にB、I1にCと入れ(別に数値の1でもよい)ることにしておいて、 それぞれのセルに値があったら対応するセルを計算する方法が 一般的な手法のような気はします。
(KAMIYA)
Sub TTT()
Dim myRow As Long, i As Long Dim myStr As String, myValue As String Dim myRange As Range
For Each myRange In Selection
myValue = StrConv(myRange.Offset(0, 3).Value, vbNarrow) myValue = UCase(myValue)
If myValue = "" Then myRange.Value = "" End If
For i = 1 To Len(myValue)
Select Case Mid(myValue, i, 1) Case "A" To "Z" myStr = myStr & Mid(myValue, i, 1) & myRange.Row Case Else myStr = myStr & Mid(myValue, i, 1) End Select
Next i
If myStr <> "" Then myRange.Formula = "=" & myStr End If
myStr = "" 'myRange.Value = myRange.Value Next myRange
End Sub
数式を入力するセル範囲を選択してマクロを実行してください 'myRange.Value = myRange.Value の先頭の ' をのければ値が入力されると思いますが その場合、複数列選択して実行するのはやめたほうがいいです (りな)
Sub FrmEval() For Each Cc In Selection Cc.Formula = "=" & Cc.Offset(0, -1).Value Next End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.