[VBA]strConvで変換される文字を整理する

やりたいこと

VBAにはstrConvという標準関数が用意されており、特定の条件を満たす文字の置換を行うことができる。
コードポイント(-32768 ~ 65535)及び一部のUnicode文字に対してstrConvに通し、置換されるされる文字を確認する。

vbUpper, vbLower

  • 大文字⇔小文字の完全相互変換(Upper・Lowerの一方でしか変換されない文字はない)
    ⇒ strConv(strConv(c, vbUpper), vbLower))とすれば元の文字に戻る
  • 変換される文字は以下4種
    1. 半角/全角アルファベット(全26種 × 2)
      ABCDEFGHIJKLMNOPQRSTUVWXYZ
      ABCDEFGHIJKLMNOPQRSTUVWXYZ
    2. ギリシャ文字(全24種)
      ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ
    3. ギリシャ数字(全10種)
      Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ
    4. キリル文字(全33種:ロシアのアルファベット)
      АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ

vbWide, vbNarrow (カタカナ以外)

  • 半角⇔全角の相互変換
  • Shift-JISのうち制御文字及び「¥」を除くすべての1バイト文字が対象
  1. 数字(全10種)
    0123456789
  2. 小文字/大文字アルファベット(全26種 × 2)
    abcdefghijklmnopqrstuvwxyz
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. カタカナ
    ★後述
  4. 記号
    ・対象は全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文字で表現される。
    これに関するルールは以下のとおりである。

    1. vbWideを使用する際、元の文字、および付随する濁音・半濁音の半角/全角は結合に影響しない。
      ex)「セ」+「゛」、「セ」+「゙」、「セ」+「゛」、「セ」+「゙」はいずれも「ゼ」になる。
    2. 元の文字 + 濁音・半濁音の文字が存在しない場合は結合しない。
      ex)「ア」+「゛」や「セ」+「゜」
    3. 元の文字 + 濁音・半濁音の文字が存在するが、濁音・半濁音が重複する場合は結合しない。
      ex)「ゼ」+「゛」、「ゼ」+「゜」
    4. 元の文字 + 濁音・半濁音の文字がCP932に存在しないが、Unicodeに存在する場合、文字化けになる。※2
      カタカナ対応表より「ヷ、ヸ、ヹ、ヺ」の4文字が該当する。
      ・「ヷ」におけるChrW(&H30F7)の返却結果は「?(3F)」である。
    5. 元の文字がそもそもCP932に存在しない場合、文字化けになる。※3
      ・「ヿ」「アイヌ文字」「特殊半濁音」

    vbHiragana, vbKatakana

    事前準備

    ひらがなについても何文字存在するのかを確認する。

    • Unicodeで定義されているひらがなの一覧 リンク
      またソースのページはこちら リンク

    Unicodeの『Hiragana(3040~309F)』に集合される文字は93文字

    ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞ
    ただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽ
    まみむめもゃやゅゆょよらりるれろゎわゐゑをん

    ゕゖ

    ゙゛゚゜(単体の記号としての濁音 / 半濁音)
    ゝゞ
    わ゙か゚き゚く゚け゚こ゚ ※

    ※この6文字は厳密には「ひらがな」+「(半)濁音」の2文字で構成されるため、1文字で表すための文字コード、コードポイントは存在しないので93文字の中には含めない。

    vbKatakana

    • 対応するカタカナに変換される。
      ぁ~ん  ゔ  ゝ ゞ
      ※「ゔ」はChrでは文字化け、ChrWのみ変換可能
    • 文字化けする。
      ゕ ゖ ゟ
    • 変化しない。
       ゙ ゛ ゚ ゜
      vbWideのように「せ」+「゛」で「ぜ」にはならない。
    • 2文字に分離する。
      わ゙ か゚ き゚ く゚ け゚ こ゚
      ex)「わ゙」⇒「わ」+「゛」

    vbHiragana

    • 対応するひらがなに変換される。
      ぁ~ん ヽ ヾ
    • 文字化けする。
      ヵ ヶ ヷ ヸ ヹ ヺ
      【アイヌ文字(ㇰ~ㇿ)】
    • 変化しない。
       ゙ ゛ ゚ ゜
      ヴ ヴ 半角カタカナ(ァ~ン)】
    • 2文字に分離する。
      【特殊半濁音(カ゚~コ゚セ゚ツ゚ト゚)】
      ex)「ト゚ 」⇒「と」+「゜」