- 締切済み
セル中の式を追加したい式の中に入れ込みたい
タイトルわかりにくくてすみません。 質問したい内容は、例えば =SUM(A1:A10) この式にROUNDDOWN関数を加えて =ROUNDODOWN( SUM(A1:A10) ,3) というような式にしたいのです。 複数の計算式があり、全てに後から式を追加したい場合、簡単に出来る方法はありますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
あまり汎用的につくる必要はないと思うので Sub test01() Dim cl As Range For Each cl In Range("B3:C8") f = cl.Formula If Mid(f, 1, 5) = "=SUM(" Then cl.Formula = "=Rounddown(" & Mid(f, 2, Len(f) - 1) & ",3)" End If Next End Sub でよいでしょう。 (1)式のありそうなセル範囲を多めに In Range("B3:C8") のところを変えること。 (2)If Mid(f, 1, 5) = "=SUM(" Then cl.Formula = "=Rounddown(" & Mid(f, 2, Len(f) - 1) & ",3)" の辺を関数によって修正すること。 を行ってください。
- cockerel
- ベストアンサー率46% (253/548)
訂正します: 「()が複数組ある場合」の2番目の「=A11&",3)」は、「=A11&",3)"」の誤りです。 ついでですが、何をしているかの説明: オリジナルの式の先頭に全角チルダ(「あ」や「式」でも意味を有していない文字なら任意)を挿入してテキストに変換し、テキストの状態で希望する「式のテキスト」が得られるように編集、その後、全角チルダを消去して式に戻すという作業を行っています。
- cockerel
- ベストアンサー率46% (253/548)
場当たり的な方法ですが・・・。 ()が一組しかない単純な場合: 1. 検察・置換を使用して=SUM(A1:A10)の「=」をたとえば「~=ROUNDDOWN(」に全置換します。 2. =SUM(A1:A10)の「)」を「),3)」に全置換します。 3. 「~」を「」(Null)に全置換します。 ()が複数組ある場合: 1. 検察・置換を使用して=SUM(A1:A10)の「=」をたとえば「~=ROUNDDOWN(」に全置換します。 2. 第11行に「=A11&",3)」を入力し、横にフィルします。 3. 第11行をコピーし、値として第10行にペーストします。 4. 「~」を「」(Null)に全置換します。 マクロ化すれば少しは「場当たり的」でなくなります。
お礼
ありがとうございます。 「=」を文字に置き換えて、数式を文字列に変換するテクニックはよくやります。 やはりこういうやり方が無難なのでしょうか。 HP作成ソフトでタグをタグで簡単に囲えるように、数式も数式で簡単に囲えたら便利なのに…。
次に紹介する ChangeFormula関数の類を作成すれば可能ですが... 「簡単に」の物差しは、人それぞれですので... Option Explicit Private Sub CommandButton1_Click() Dim isOK As Boolean isOK = ChangeFormula(1, 11, 1, 10) End Sub Option Explicit Public Function ChangeFormula(ByVal RS As Integer, _ ByVal RE As Integer, _ ByVal CS As Integer, _ ByVal CE As Integer) Dim I As Integer Dim J As Integer For I = RS To RE For J = CS To CE If Cells(I, J).Formula Like "=SUM(*)" Then Cells(I, J).Formula = "=ROUNDDOWN(" & Mid$(Cells(I, J).Formula, 2) & ",3)" End If Next J Next I End Function ※私は、Excel門外漢です。参考程度にして下さい。
補足
ありがとうございます。 追加したい関数式の内側に入れたい数式が質問文で書いたSUM()だけではないので、このマクロでは対応仕切れなさそうです。
補足
ありがとうございます。 追加したい関数式の内側に入れたい数式が質問文で書いたSUM()だけではないので、このマクロでは対応仕切れなさそうです。