1
Excel 2010でマクロを使用すると、名前の付いた範囲で定義されたすべての「無効な」文字をスペースで置き換えようとしています。Excel 2010 vbaマクロの代替ワイルドカード文字(?および*)
Dim sanitisedString As String
sanitisedString = Application.WorksheetFunction.Clean(uncleanString)
Dim validCharacters As Range
Set validCharacters = ActiveWorkbook.Names("ValidCharacters").RefersToRange
Dim pos As Integer
For pos = 1 To Len(sanitisedString)
If WorksheetFunction.CountIf(validCharacters, Mid(sanitisedString, pos, 1)) = 0 Then
sanitisedString = WorksheetFunction.Replace(sanitisedString, pos, 1, " ")
End If
Next
CountIfはこれらをワイルドカード文字として解釈しているため、*と?を除くすべての文字に適用されます。
私が使用して、COUNTIFのすべての文字をエスケープしようとしている:
If WorksheetFunction.CountIf(validCharacters, "~" & Mid(sanitisedString, pos, 1)) = 0
をが、これは関係なく、リスト内にあるか否かの、すべての文字が交換されるに至りました。
使用してforループ "〜*" と "?〜" の後に置かれ、私は2つの別々の代替コマンドをやってみました、:
sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~*", " ")
sanitisedString = WorksheetFunction.Substitute(sanitisedString, "~?", " ")
が、*と?まだそれを作る。
私は間違っていますか?
は素晴らしい、ありがとう:)なぜ私はそのことを考えていませんでした... – simonalexander2005