和風スパゲティのレシピ

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

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

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