VBA組込み関数のAsc関数と、
シート関数のASC関数の違いを解説します。
と言ってもこの2つはまったく違う関数であり、
まずVBAのAsc関数は「文字コードを取得する」関数で、
Shift-JISにおける文字コードを取得できます。
Debug.Print Asc("a") ' ← 97が返ります。
英数字に対してはAsciiコードを取得しているに等しいため、
Asc関数と名付けられている(と思われる)関数ですね。
これと同じ動作をするシート関数は、「CODE関数」が該当します。
対してシート関数の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 |
こんな風になっています。
間違った方を使用しないように注意してください。
ちなみにこの仕様で混同しないよう、私は
- Asciiコードを取得するVBAのAsc関数は「アスキー関数」
- 文字コードとは関連の薄いワークシートのASC関数は「エーエスシー関数」
と読み分けています。
関数の読み方にMicrosoftの公式見解は無いようですので、
気に入ったらこの読み方で読んでみて下さい。