もくじ
やりたいこと
VBAにはstrConvという標準関数が用意されており、特定の条件を満たす文字の置換を行うことができる。
コードポイント(-32768 ~ 65535)及び一部のUnicode文字に対してstrConvに通し、置換されるされる文字を確認する。
vbUpper, vbLower
- 大文字⇔小文字の完全相互変換(Upper・Lowerの一方でしか変換されない文字はない)
⇒ strConv(strConv(c, vbUpper), vbLower))とすれば元の文字に戻る - 変換される文字は以下4種
-
- 半角/全角アルファベット(全26種 × 2)
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ABCDEFGHIJKLMNOPQRSTUVWXYZ - ギリシャ文字(全24種)
ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ - ギリシャ数字(全10種)
Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ - キリル文字(全33種:ロシアのアルファベット)
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
- 半角/全角アルファベット(全26種 × 2)
vbWide, vbNarrow (カタカナ以外)
- 半角⇔全角の相互変換
- Shift-JISのうち制御文字及び「¥」を除くすべての1バイト文字が対象
- 数字(全10種)
0123456789 - 小文字/大文字アルファベット(全26種 × 2)
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ - カタカナ
★後述 - 記号
・対象は全40文字
・そのうち36文字は1:1の関係
・「¥」のみ半角→全角に変換されない
・「シングルクォーテーション」「ダブルクォーテーション」「ハイフン」は1:多の関係
| 連番 | 文字コード | 半角文字 | 対応 | 文字コード | 全角文字 |
|---|---|---|---|---|---|
| 1 | 0020 | 半角スペース | ⇔ | 8140 | 全角スペース |
| 2 | 0021 | ! | ⇔ | 8149 | ! |
| 3 | 0023 | # | ⇔ | 8194 | # |
| 4 | 0024 | $ | ⇔ | 8190 | $ |
| 5 | 0025 | % | ⇔ | 8193 | % |
| 6 | 0026 | & | ⇔ | 8195 | & |
| 7 | 0028 | ( | ⇔ | 8169 | ( |
| 8 | 0029 | ) | ⇔ | 816A | ) |
| 9 | 002A | * | ⇔ | 8196 | * |
| 10 | 002B | + | ⇔ | 817B | + |
| 11 | 002C | , | ⇔ | 8143 | , |
| 12 | 002E | . | ⇔ | 8144 | . |
| 13 | 002F | / | ⇔ | 815E | / |
| 14 | 003A | : | ⇔ | 8146 | : |
| 15 | 003B | ; | ⇔ | 8147 | ; |
| 16 | 003C | < | ⇔ | 8183 | < |
| 17 | 003D | = | ⇔ | 8181 | = |
| 18 | 003E | > | ⇔ | 8184 | > |
| 19 | 003F | ? | ⇔ | 8148 | ? |
| 20 | 0040 | @ | ⇔ | 8197 | @ |
| 21 | 005B | [ | ⇔ | 816D | [ |
| 22 | 005D | ] | ⇔ | 816E | ] |
| 23 | 005E | ^ | ⇔ | 814F | ^ |
| 24 | 005F | _ | ⇔ | 8151 | _ |
| 25 | 0060 | ` | ⇔ | 814D | ` |
| 26 | 007B | { | ⇔ | 816F | { |
| 27 | 007C | | | ⇔ | 8162 | | |
| 28 | 007D | } | ⇔ | 8170 | } |
| 29 | 007E | ~ | ⇔ | 8160 | ~ |
| 30 | 00A1 | 。 | ⇔ | 8142 | 。 |
| 31 | 00A2 | 「 | ⇔ | 8175 | 「 |
| 32 | 00A3 | 」 | ⇔ | 8176 | 」 |
| 33 | 00A4 | 、 | ⇔ | 8141 | 、 |
| 34 | 00A5 | ・ | ⇔ | 8145 | ・ |
| 35 | 00DE | ゙ | ⇔ | 814A | ゛ |
| 36 | 00DF | ゚ | ⇔ | 814B | ゜ |
| 37 | 005C | ¥ | ← | 818F | ¥ |
| 38 | 0027 | ‘ | ⇔ | FA56 | ‘ |
| ← | 8165 | ‘ | |||
| ← | 8166 | ’ | |||
| 39 | 0022 | “ | ⇔ | FA57 | " |
| ← | 8167 | “ | |||
| ← | 8168 | ” | |||
| 40 | 002D | – | ⇔ | 817C | - |
| ← | 815B | ー |
vbWide, vbNarrow (カタカナ)
対応表
| 種別 | 文字種 | 全角 文字 |
変換 | 半角 文字 |
JIS X 0208 | JIS X 0213 | Unicode | 全角/半角 変換 |
清音/濁音 変換 |
|---|---|---|---|---|---|---|---|---|---|
| 清音 | 55種 | ア~オ カ~コ サ~ソ タ~ト ナ~ノ ハ~ホ マ~モ ヤ~ヨ ラ~ロ ワヲ ン ァ~ォ ャ~ョ ッ |
⇔ | ア~オ カ~コ サ~ソ タ~ト ナ~ノ ハ~ホ マ~モ ヤ~ヨ ラ~ロ ワ~ヲ ン ァ~ォ ャ~ョ ッ |
○ | ○ | ○ | ○ | |
| 濁音 半濁音 |
26種 | ガ~ゴ ザ~ゾ ダ~ド バ~ボ パ~ポ ヴ |
⇔ | ガ~ゴ ザ~ゾ ダ~ド バ~ボ パ~ポ ヴ |
○ | ○ | ○ | ○ | ○ |
| その他 JIS 0208 登録あり |
ヮ | 変換なし ※1 |
○ | ○ | ○ | ||||
| ヰ | |||||||||
| ヱ | |||||||||
| ヵ | |||||||||
| ヶ | |||||||||
| ・ | ⇔ | ・ | ○ | ○ | ○ | ○ | |||
| ー | ⇔ | ー | ○ | ○ | ○ | ○ | |||
| ヽ | 変換なし ※1 |
○ | ○ | ○ | |||||
| ヾ | ⇔ | ヽ+「゛」 | ○ | ○ | ○ | ○ | |||
| その他 JIS 0208 登録なし |
ヷ | × | ○ ※3 |
△ ※2 |
○ | ||||
| ヸ | ○ | ||||||||
| ヹ | ○ | ||||||||
| ヺ | ○ | ||||||||
| ヿ | |||||||||
| アイヌ 文字 |
17種 | ㇰㇱㇲㇳㇴ ㇵㇶㇷㇸㇹ ㇷ゚ㇺㇻㇼㇽ ㇾㇿ |
× | ○ ※3 ※4 |
○ | ||||
| 特殊半濁音 | 8種 | カ゚キ゚ク゚ケ゚コ゚ セ゚ツ゚ト゚ |
× | ○ ※3 |
|||||
事前準備
まず、カタカナが何文字存在するのかを確認する。
- CP932 (≒Shift-JIS X 0208)の文字コード一覧 リンク
- Shift-JIS X 0213の文字コード一覧 リンク
X 0208でのみ定義されている文字は背景色が緑色になっているのでX 0213と区別がつきやすい。 - Shift-JIS X 0213とUnicodeの文字コード対応表 リンク
- Unicodeで定義されているカタカナの一覧 リンク
またソースはUnicodeを定義している団体のサイトにある。 リンク
アイヌ文字のブロックは『Katakana(30A0–30FF)』でなく『Katakana Phonetic Extensions(31F0 – 31FF)』に収録されている。 リンク (※4)
関数の処理 1. 全角文字と半角文字の相互変換
- 「ア」⇔「ア」に「セ」⇔「セ」というように半角文字と全角文字を相互変換する。
- 下記6文字は対応する文字が存在しないため、関数に通しても文字は変わらない。(※1)
「ヮ、ヰ、ヱ、ヵ、ヶ、ヽ」
関数の処理 2. 濁音・半濁音の分離/結合
半角文字には濁音や半濁音の文字が存在しない。
「ゼ」「パ」は「セ」+「゙(半角濁音)」や「ハ」+「゚(半角半濁音)」の2文字で表現される。
これに関するルールは以下のとおりである。
- vbWideを使用する際、元の文字、および付随する濁音・半濁音の半角/全角は結合に影響しない。
ex)「セ」+「゛」、「セ」+「゙」、「セ」+「゛」、「セ」+「゙」はいずれも「ゼ」になる。 - 元の文字 + 濁音・半濁音の文字が存在しない場合は結合しない。
ex)「ア」+「゛」や「セ」+「゜」 - 元の文字 + 濁音・半濁音の文字が存在するが、濁音・半濁音が重複する場合は結合しない。
ex)「ゼ」+「゛」、「ゼ」+「゜」 - 元の文字 + 濁音・半濁音の文字がCP932に存在しないが、Unicodeに存在する場合、文字化けになる。※2
カタカナ対応表より「ヷ、ヸ、ヹ、ヺ」の4文字が該当する。
・「ヷ」におけるChrW(&H30F7)の返却結果は「?(3F)」である。 - 元の文字がそもそもCP932に存在しない場合、文字化けになる。※3
・「ヿ」「アイヌ文字」「特殊半濁音」
vbHiragana, vbKatakana
事前準備
ひらがなについても何文字存在するのかを確認する。
Unicodeの『Hiragana(3040~309F)』に集合される文字は93文字
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞ
ただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽ
まみむめもゃやゅゆょよらりるれろゎわゐゑをん
ゔ
ゕゖ
ゟ
゙゛゚゜(単体の記号としての濁音 / 半濁音)
ゝゞ
わ゙か゚き゚く゚け゚こ゚ ※
※この6文字は厳密には「ひらがな」+「(半)濁音」の2文字で構成されるため、1文字で表すための文字コード、コードポイントは存在しないので93文字の中には含めない。
vbKatakana
- 対応するカタカナに変換される。
【ぁ~ん ゔ ゝ ゞ】
※「ゔ」はChrでは文字化け、ChrWのみ変換可能 - 文字化けする。
【ゕ ゖ ゟ】 - 変化しない。
【 ゙ ゛ ゚ ゜】
vbWideのように「せ」+「゛」で「ぜ」にはならない。 - 2文字に分離する。
【わ゙ か゚ き゚ く゚ け゚ こ゚】
ex)「わ゙」⇒「わ」+「゛」
vbHiragana
- 対応するひらがなに変換される。
【ぁ~ん ヽ ヾ】 - 文字化けする。
【ヵ ヶ ヷ ヸ ヹ ヺ】
【アイヌ文字(ㇰ~ㇿ)】 - 変化しない。
【 ゙ ゛ ゚ ゜】
【ヴ ヴ 半角カタカナ(ァ~ン)】 - 2文字に分離する。
【特殊半濁音(カ゚~コ゚、セ゚、ツ゚、ト゚)】
ex)「ト゚ 」⇒「と」+「゜」