- ベストアンサー
ExcelのROUND関数を一括解除したい。
ExcelのROUND関数を一括解除(削除)したいのですが、 やり方を教えてください。 具体的には、 以下のような計算式 =ROUND('収入データ'!A176/'収入データ'!A181,3) を ='収入データ'!A176/'収入データ'!A181 にしたいのです。 sheet内の表中あちこちに、 =ROUND('収入データ'!A26/'収入データ'!A31,3) =ROUND('収入データ'!A56/'収入データ'!A61,3) =ROUND('収入データ'!A86/'収入データ'!A91,3) などのROUND関数が設定されています。 置換で、*や?を使って試してみましたが、 「入力した数式にはエラーがあります。」という エラーメッセージが出て、うまく実行できません。 そもそも置換機能では一括解除(削除)できないのでしょうか。 以上、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAですが、標準モジュールに下記を貼り付けて、実行する。 Sub test01() Dim cl As Range For Each cl In Selection If cl.HasFormula Then f1 = cl.Formula p = InStr(f1, "ROUND") If p <> 0 Then s1 = Split(f1, ",") s2 = Split(s1(0), "(") f2 = "=" & s2(1) cl.Formula = f2 End If End If Next End Sub ROUNDという式のありそうな(大き目の)、セル範囲全体を範囲指定して、実行してください。ROUNDDOWN、ROUNDUPも省かれます。 上記VBAは式のあるセルを対象にし、ROUNDがあるか。あれば、初め式をカンマでわけ、その1番目をとり、再度その1番目を対象に、 それを(でわけその2番目をとり、=と結合したものを式として設定してます。 他の関数はそのままのはずです。 質問者はVBAがはじめてらしいのですが、上げてみます。
その他の回答 (3)
何回かに分ければできます。 検索する文字列:=ROUND( 置換後の文字列:★ [すべて置換] 検索する文字列:,3) 置換後の文字列: [すべて置換] 検索する文字列:★ 置換後の文字列:= [すべて置換] 以上です。
お礼
一度文字列にしてから、ということですね。 ありがとうございました。
こんな方法でもよいのでしょうか? Sub test() Dim i As Range Dim j As Long Dim k As String For Each i In ActiveSheet.UsedRange If i.FormulaLocal Like "=ROUND*" Then j = Len(i.FormulaLocal) k = Mid(i.FormulaLocal, 8, j) i.Value = "=" & Left(k, j - 10) End If Next End Sub
お礼
ありがとうございました。 No4の方の情報をもとに何とか実行してみたのですが、残念ながら 「アプリケーション定義またはオブジェクト定義のエラーです。」と出てしまいました。 デバッグを見たら、 i.Value = "=" & Left(k, j - 10) のところに黄色マークが付いていました。
補足
SuperMildさん、上記はもしかしてマクロを使う方法でしょうか。 上記方法を是非とも試してみたいのですが、 私はマクロ使用経験がなく、ハードルが高くて、 今すぐ内容を理解することができません。 ・・・申し訳ないです。
- Ryokucha
- ベストアンサー率25% (115/450)
数式のまま変換は出来ないので 1.=ROUND( を aaa= にする これで文字列扱いになります aaaは何でも構いません 2.,3)を置換で消します。 3.aaa= を =に変換する。 これでどうでしょう?
お礼
ありがとうございます。試してみたら出来ました。
お礼
ご指摘どおりVBAは初めてです。 Visual Basic Editorを開いて、何とか「標準モジュール」を見つけて、 貼り付けて、実行してみたら、 (実行された数式の解読までは無理ですが・・・) 確かに出来ました! ありがとうございました。