• ベストアンサー

エクセルの数式

すいません。またお力を貸して下さい。 マクロでプログラムを組みたいのですが、 例として シート1のA1セルに「50」、B1セルに 「-5」、C1セルに「0」が入力されていたとします。それをシート2のA1セルに数式として「=50-5+0」と表示させるようにしたいのです。(A1セル自体に単に「45」と表示されるだけでなく。) 「=A1+B1+C1」のような形式では困るのです。 どなたか解決法をお教え下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。 一案ですが。 ----------------------------------------------- Sub test()  Dim Siki  With Sheets("Sheet1")   Siki = "="   Call MakeFormula(Siki, .Range("A1").Value)   Call MakeFormula(Siki, .Range("B1").Value)   Call MakeFormula(Siki, .Range("C1").Value)  End With  Sheets("Sheet2").Range("A1").Formula = Siki End Sub --------------------------------------- Sub MakeFormula(Siki, Atai)  If Siki <> "=" And Atai >= 0 Then    Siki = Siki & "+"  End If  Siki = Siki & Atai End Sub ------------------------------------------ 以上です。  

oyasaisanba
質問者

お礼

回答ありがとうございます。 おかげさまでこのとおりにすることで私が表示したいと思ったとおりのものが表示されました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

oyasaisanba 様 今回のわたしのマクロは、ちょうど初級コースを終了したレベルです。 ユーザー定義関数 配列(動的配列) 参考本: 『かんたんプログラミング Exce; VBA 応用編』(技術評論社) この前半ぐらいで、ほとんど出てきます。 良い書籍に出会えることを期待しております。

oyasaisanba
質問者

お礼

わざわざ本の推薦までしていただき感謝しております。 早速ご推薦いただいた本を書店で見つけ、購入することができました。読みながら少しずつ勉強していきたいと思います。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

わたしも考えてみました。 '------------------------------------- '<標準モジュール> '式に表示する関数 Function ShowFormula(セル範囲 As Range, _       Optional r2 As Range, _       Optional r3 As Range) As String '引数はセル1つでも範囲でも可 Dim r1 As Range Dim i As Long Dim buf As String Dim c As Variant Dim myData As Variant Set r1 = セル範囲 If Not r2 Is Nothing Then Set r1 = Union(r1, r2) If Not r3 Is Nothing Then Set r1 = Union(r1, r3) 'Optional r4 と引数を増やすには、同じようにすると良い ReDim myData(r1.Count - 1) For Each c In r1 If VarType(c) = vbDouble Then  myData(i) = c.Value Else  myData(i) = 0 End If i = i + 1 Next For i = LBound(myData) To UBound(myData)  If i = LBound(myData) Then   buf = myData(i)  Else  buf = buf & Mid$("-++", Sgn(myData(i)) + 2, 1) & Abs(myData(i))  End If Next ShowFormula = "=" & buf 'ShowFormula = Application.Sum(Rng) & "=" & buf '答え= 式 End Function '>「45」と表示されるようにしたいのです。 '------------------------------------- '文字列の式を計算するユーザー定義関数 Function myEvaluate(文字列 As Variant) As Double Dim myStr As Variant myStr = 文字列 If VarType(myStr) = vbString And myStr Like "[==]*" Then  myEvaluate = Application.Evaluate(StrConv(myStr, vbNarrow)) End If End Function '------------------------------------- 使用例: 式の表示; =ShowFormula(Sheet1!A1:C1) =ShowFormula(Sheet1!A1,Sheet1!B1,Sheet1!C1) 表示; =50-5+0 マクロから与える場合は; ActiveCell.Value = SHOWFORMULA(Sheet1.Range("A1:C1")) 式を計算させる; =myEvaluate(A1) 表示; 45 (なお、式には大文字・小文字の違いありません。見易さだけのためです)

oyasaisanba
質問者

お礼

回答ありがとうございます。 しかし、マクロに挑戦しようと思い入門書を買って勉強しだしてから数日の私には現状ではこのプログラムの仕組みを理解するには難しかったようです。(汗) そもそも最初のFunctionさえ見たことありませんでしたし・・・。ですが、これから勉強していく上できっと大いに参考になるものを見せていただいたと思います。とりあえず手元にある入門書にはほとんど記載されていないのでもう少し上級の参考書を書店で求めようと思います。(笑)

  • rio_d
  • ベストアンサー率47% (71/149)
回答No.2

こんばんは。 マクロでいいんですよね? 先頭を『'=』と、シングルクォーテーションを付けないと数式扱いされるみたいですね。 Sub ほにゃらら()   Dim sTmp As String   sTmp = "'=" & Trim(Str(Cells(1, 1)))   If Cells(1, 2) < 0 Then     sTmp = sTmp & Trim(Str(Cells(1, 2)))   Else     sTmp = sTmp & "+" & Trim(Str(Cells(1, 2)))   End If   If Cells(1, 3) < 0 Then     sTmp = sTmp & Trim(Str(Cells(1, 3)))   Else     sTmp = sTmp & "+" & Trim(Str(Cells(1, 3)))   End If   Sheets("シート2").Cells(1, 1) = sTmp End Sub シート表現等は、あまり考慮しませんでしたが、 こんな感じでよいかと思います。

oyasaisanba
質問者

補足

早速の回答ありがとうございます。 おかげさまで基本的には私の悩みのほとんどは 解決したのですが、欲を言えばセル上には (数値の設定は上記の例のままだとすると)「45」と表示されるようにしたいのです。それで上の欄(?)には「50-5+0」というように中身が分かるようにしたいのです。よろしければお答えいただきたい のですが・・・。

  • dober-o
  • ベストアンサー率59% (260/439)
回答No.1

マクロを使うまでもなく = "=" & A1 & IF ( B1 >= 0, "+", "") & B1 & IF( C1 >= 0, "+", "") & C1 とシート2のA1セルに入力すればOKです 符号を気にしない場合は if(...)はなくてかまいません

oyasaisanba
質問者

補足

早速の回答ありがとうございました。 マクロのプログラムの中の一部として使いたいので VBA形式(?)で答えていただきたかったのです。

関連するQ&A