文字列中の、2文字にわかれている濁音/半濁音(例「た゛か゛は゜」)を、1文字(例「だがぱ」)に変換するような処理の例。
※元ネタ:橋ビロ子@hassy_birowさんのツイート
※自分の📝メモ用ツリー
- か/カ行・さ/サ行・た/タ行・は/ハ行およびウの濁音変換、は/ハ行の半濁音変換のみ可
※か・さ・た・は行については、Unicode上濁音が清音のとなり(+1)に、は行については同じく半濁音が清音の2つ隣(+2)に存在することを利用 - 便宜上「゛」(U+309B:KATAKANA-HIRAGANA VOICED SOUND MARK)や「゜」(U+309C:KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK)については、「゙」(u+3099:COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK)や「゚」(U+309A:COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK)へと置換
- Win32APIのNormalizeStringを利用
- 便宜上「゛」(U+309B:KATAKANA-HIRAGANA VOICED SOUND MARK)や「゜」(U+309C:KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK)については、「゙」(u+3099:COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK)や「゚」(U+309A:COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK)へと置換
- Unicode正規化(デフォルトはNFC(Normalization Form Canonical Composition))なので、濁音/半濁音以外も正規化される(厳密にやろうとすると"[^\u3099\u309a][\u3099\u309a]"のような正規表現に一致した部分だけ適用する等の細工が必要)
- 文字列終端としてvbNullCharを使用しているため、指定文字列中にvbNullCharがある場合には誤動作する(セルの値の場合はvbNullCharが含まれることはないため問題なし・厳密にやろうとするとvbNullCharで分割したものそれぞれに適用してからJoinするなどの細工が必要)