和風スパゲティのレシピ

日本語でコーディングするExcelVBA

Asc(VBA関数)とASC(シート関数)の違い

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の公式見解は無いようですので、
気に入ったらこの読み方で読んでみて下さい。