プロが教える店舗&オフィスのセキュリティ対策術

別のアプリケーションから文字(数式)をコピーし
エクセルシートのD2に貼り付けます。
=が無い式になります。
1+2+3とD2に入ります。
隣のセルのE2に答えを出したいです。

式をD列に貼り付けたときに、改行されていたり、
数字以外の文字や空白が含まれています。
貼り付けるとこんな感じです。

"(1+2)*5件+(10-1件)*3
     +18*3*2件
+(12+5)"

このままだと計算出来ないので

(1+2)*5+(10-1)*3+18*3*2+(12+5)

このように余分な文字や空白、改行を消して1行に直したいです。


データは2000行ほどあります。

マクロコードを教えてください。

「エクセルのマクロコードを教えてください。」の質問画像

A 回答 (4件)

こんにちは



>このように余分な文字や空白、改行を消して1行に直したいです
対象文字列の取りうる可能性を全て網羅できませんが、ご提示の例示程度の内容でよければこんな感じでできるかも知れません。

関数化してありますので、対象文字列がA1セルにあるとするなら
 =adjust(A1)
と入力すれば、1行に整形します。

事前に、標準モジュールに以下をコピペしておいてください。
Function adjust(ByVal s As String) As String
 Dim reg
 Set reg = CreateObject("VBScript.RegExp")
 reg.Global = True
 reg.Pattern = "[^0-9-/\+\*\.\^\(\)]"
 adjust = reg.Replace(s, "")
End Function

※ 数字や記号等は、基本的に半角文字であると仮定しています。
※ 数学的な関数や定数(例えば、SIN()とかLOGあるいはπなど)には対応していません。(頑張って丹念につぶせば、対応は可能でしょうけれど…)
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2021/06/09 13:41

No.2です。



これ忘れてました。

Evaluateメソッド(文字列の数式を実行します)
https://excel-ubara.com/excelvba4/EXCEL_VBA_424. …

ただ別のアプリからのコピペだと改行コードとか純粋にExcel標準なのかどうかが気にはなりますね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Evaluateのコードがよくわかりません。

お礼日時:2021/06/09 10:37

・文字に統一性があるか?


・空白に統一性があるか?
・() は必ず半角になるのか?

とかありそうかも。
    • good
    • 0

関数ではダメですか?


例えばF列にSUBSTITUTE関数で"件"だけを除いたD列の数式を表示させればイケると思います。

https://yotsuba-navi.com/archives/3364
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!