[[20021030112939]] 『vbaで算式をセルから読み取って計算』(HISAO) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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.