こんにちは。
一般的に、マクロというのは、
実行前の元の状態に戻すことが出来ないもの
ですから、元データを消す(上書きする)内容の作成依頼には、
皆、消極的になります。
そうした設計のリスクや、多くの場合設計の見直しになること
を経験的に承知している人が回答者には多いからです。
とりあえず、今の時点で解っている
(このページに書かれている)要求仕様に応える形で、
簡単に(確認ダイアログ付き)マクロを書きました。
一応、
"消す"マクロというのは、よーく確かめてから使うものですから、
"消えても困らない"ようにバックアップを取っておく等、
十分に対策をしてから試すようにしてください。
試した上で、"消す"マクロが本当に必要なのか、
元のデータを維持したまま、隣のセルに書きだすとか、
設計の見直しでより良い仕様を見つけられないか、
よーく検討なさってください。
その他の点も含めてもし疑問があれば、
こちらに詳しく伝わるように補足欄にでも書いてみて下さい。
直ちにお応えできる内容でしたら、再度回答するつもりでいます。
> →エクセル
のシート上(セル範囲)にある
> →たくさんの文章から、> 文章から、
摂氏度表記(数値と記号℃)
【##℃】【-##℃】【##.#℃】【-##.#℃】 (全角文字 可)
> という言葉だけ(摂氏度データ文字列を各セル一件だけ)取り出して、
> 他の言葉は削除する(摂氏度表記がなければ空白にする> →そうです。)マクロ
■テストした(抽出可能な)サンプル(***は℃記号を含まない和文文字列)
***20℃***
***-21℃***
***26.3℃***
***-27.5℃***
***28℃***
***40℃***
***31.5℃***
***-32℃***
' ' // 処理したいセル範囲を事前に選択してから実行
Sub Re9374800Wc()
Dim oRegExp As Object, c As Range, sBuf
If TypeName(Selection) <> "Range" Then MsgBox "セル範囲を選択してやり直し": Exit Sub
If MsgBox("選択中のセル範囲にある文字列から" & _
vbLf & "摂氏度表記データ【##℃】部分のみ抽出し、置き換えます。" & _
vbLf & "該当しない文字列を削除することになりますが、" & _
vbLf & "実行しますか?" _
, vbQuestion Or vbYesNo) <> vbYes Then Exit Sub
Set oRegExp = CreateObject("VBScript.RegExp")
oRegExp.Pattern = "[--\..\d0-9]+℃"
Selection.SpecialCells(xlCellTypeConstants).Select
For Each c In Selection
sBuf = c
If oRegExp.Test(sBuf) Then
c.Value = oRegExp.Execute(sBuf)(0)
Else
c.Value = ""
End If
Next
End Sub
' ' //
お礼
回答ありがとうございます。 大変助かりました。