VBA組込み関数のAsc関数と、
シート関数のASC関数の違いを解説します。
と言ってもこの2つはまったく違う関数であり、
まずVBAのAsc関数は「文字コードを取得する」関数で、
Shift-JISにおける文字コードを取得できます。
Debug.Print Asc("a") ' ← 97が返ります。
英数字に対してはAscii(アスキー)コードを取得しているに等しいため、
Asc関数と名付けられている(と思われる)関数ですね。
これと同じような動作をするシート関数は「CODE関数」が該当します。
※ 厳密にはCODE関数はShift-JISではなくJISの文字番号を取得するため、
同じ用途で使いますが返る値は異なったものになります。
対してシート関数のASC関数は全角文字を半角に変換する関数です。
Debug.Print WorksheetFunction.Asc("ABC123カナ") ' ← 「ABC123カナ」が返ります。
ABCをABCに、123を123に、カナをカナに変換する関数であり、
VBAのAsc関数とはほぼ同名ですが全く別の関数です。
シート関数のASC関数に対応するVBA関数は、
StrConv関数の第2引数をvbNarrowにしたときに該当します。
Debug.Print StrConv("ABC123カナ", vbNarrow) ' ← 「ABC123カナ」が返ります。
整理すると、
| 処理 | VBA関数 | シート関数 |
|---|---|---|
| 文字コード取得 | Asc | CODE |
| 全角 ⇒ 半角変換 | StrConv | ASC |
こんな感じです。
より詳細に表を完成させると、
| 処理 | VBA関数 | シート関数 |
|---|---|---|
| JIS コード取得 | なし | CODE |
| JIS 文字取得 | なし | CHAR |
| Shift-JIS コード取得 | Asc | なし |
| Shift-JIS 文字取得 | Chr | なし |
| UNICODE コード取得 | AscW | UNICODE |
| UNICODE 文字取得 | ChrW | UNICHAR |
| 全角 ⇒ 半角変換 | StrConv(vbNarrow) | ASC |
| 半角 ⇒ 全角変換 | StrConv(vbWide) | JIS |
こんな風になっています。
間違った方を使用しないように注意してください。
ちなみにこの仕様で混同しないよう、私は
- Asciiコードを取得するVBAのAsc関数は「アスキー関数」
- 文字コードとは関連の薄いワークシートのASC関数は「エーエスシー関数」
と読み分けています。
関数の読み方にMicrosoftの公式見解は無いようですので、
気に入ったらこの読み方で読んでみて下さい。