Excel VBA で次の RegEx を使用して、すべての印刷不可および非 ASCII (拡張) 文字を削除しようとしています。
[^\x09\0A\0D\x20-\xFF]
これは、理論的には、タブ、ラインフィード、キャリッジ リターン、または印刷可能な ASCII 文字 (16 進数の 20 から FF または 12 進数の 32 から 255 の間の文字コード) 以外のものと一致するはずです。ここで、Microsoft VBScript の正規表現が \xCC 表記をサポートしていることを確認しました。ここで、CC は 16 進数の ASCII コードです。
問題は、この正規表現が 127 を超えるすべての文字に一致することです。一致する文字のコードが 127 を超えると、match.value で「無効なプロシージャ コール」がスローされます。VBScript RegEx が 127 を超える文字コードをサポートしていないだけですか? このデータがどこにも見つからないようです。完全なコードは次のとおりです。
regEx.Pattern = "[^\x09\0A\0D\x20-\xFF]"
regEx.IgnoreCase = True 'True to ignore case
regEx.Global = True 'True matches all occurances, False matches the first occurance
regEx.MultiLine = True
If regEx.Test(Cells(curRow, curCol).Value) Then
Set matches = regEx.Execute(Cells(curRow, curCol).Value)
numReplacements = numReplacements + matches.Count
For matchNum = matches.Count To 1 Step -1
Cells(numReplacements - matchNum + 2, 16).Value = matches.Item(matchNum).Value
Cells(numReplacements - matchNum + 2, 17).Value = Asc(matches.Item(matchNum).Value)
Next matchNum
Cells(curRow, curCol).Value = regEx.Replace(Cells(curRow, curCol).Value, replacements(pattNo))
End If
一致する最初の文字は 0x96 (&ndash) です。「マッチ」を見て展開すると、「ウォッチ」ウィンドウに表示されます。ただし、matches.Item(matchNum).Value を見ようとすると取得します (スクリーンショットを参照)。何か案は?