VBA文字置換で濁音と清音を区別する(応急処置)
エクセルのマクロで出力しているHTMLがあります。
文字コードの関係でカタカナの「ソ」が文字化けするので、置換(Replace)で「ソ\」としたいのですが、置換したくない「ゾ」まで置換されてしまいます。
例
str = “ソノナハ怪傑ゾロ”
str = Replace(str, “ソ”, “ソ\”)
↓実行
str = “ソ\ノナハ怪傑ソ\ロ”
str = Replace(str, “ソ”, “ソ\”)
↓実行
str = “ソ\ノナハ怪傑ソ\ロ”
濁音の「ゾ」まで対象としてヒットしてしまい、清音に置換しちゃってます。
回避方法を検索してみたけど、有効な手段がわからなかったのでとりあえず以下の方法で回避しました。
エクセルマクロの置換で濁音と清音を区別する方法
試しに濁音の「ゾ」で検索をしても、清音の「ソ」はヒットしなかったので
1。先に「ゾ」を検索して別の文字に置換
2。その後に「ソ」を置換
3。最後の置換した「ゾ」を元に戻す
2。その後に「ソ」を置換
3。最後の置換した「ゾ」を元に戻す
コードで書くと
str = “ソノナハ解決ゾロ”
str = Replace(Replace(Replace(str, “ゾ”, “%%zo%%”),”ソ”,”ソ\”), “%%zo%%”, “ゾ”)
↓実行
str = “ソ\ノナハ解決ゾロ”
str = Replace(Replace(Replace(str, “ゾ”, “%%zo%%”),”ソ”,”ソ\”), “%%zo%%”, “ゾ”)
↓実行
str = “ソ\ノナハ解決ゾロ”
Replaceは入れ子で実行可能で、一番内側から外側の順に実行されます。
ゾ→%%zo%%
ソ→ソ\
%%zo%%→ゾ
ということで、すごくカッコわるいけど、まぁ目的は達成してるのでとりあえずOK。