'------------------------------------------------ '【名 称】wshReplace2.vbs '【機 能】WSHのRegExpを使った簡易な複数行置換マクロ '範囲選択時:選択範囲を置換 '非選択時:ファイル全体を置換 '------------------------------------------------ Private Sub Main sPattern = InputBox("置換パターンを入力してください", "簡易複数行置換マクロ", "s/置換前/置換後/gi") '置換のみ対応 If Left(sPattern, 1) <> "s" Then Exit Sub If Len(sPattern) < 5 Then Exit Sub '区切り文字の取得 sDelim = Mid(sPattern, 2, 1) 'RegExpオブジェクト生成 Set oRegExp = New RegExp '区切り文字をいったんすべてタブに置換して oRegExp.Pattern = sDelim oRegExp.Global = True sRet = oRegExp.Replace(sPattern, vbTab) 'もし区切り文字がエスケープされていたら元に戻す oRegExp.Pattern = "\\" & vbTab oRegExp.Global = True sRet = oRegExp.Replace(sRet, sDelim) '置換前切り出し iStart = 3 iEnd = InStr(iStart, sRet, vbTab) If iStart >= iEnd Then Exit Sub sBefore = Mid(sRet, iStart, iEnd - iStart) '置換後切り出し iStart = iEnd + 1 iEnd = InStr(iStart, sRet, vbTab) If iStart > iEnd Then Exit Sub sAfter = Mid(sRet, iStart, iEnd - iStart) '置換後文字列の改行コード生成 oRegExp.Pattern = "\\r" oRegExp.Global = True sAfter = oRegExp.Replace(sAfter, vbCr) oRegExp.Pattern = "\\n" oRegExp.Global = True sAfter = oRegExp.Replace(sAfter, vbLf) '修飾子判定 iStart = iEnd + 1 If Instr(iStart, sRet, "g") Then oRegExp.Global = True If Instr(iStart, sRet, "i") Then oRegExp.IgnoreCase = True '置換処理 oRegExp.Pattern = sBefore If GetSelectedString(CLng(0)) = "" Then SelectAll InsText CStr(oRegExp.Replace(GetSelectedString(CLng(0)), sAfter)) Set oRegExp = Nothing End Sub Call Main