和風スパゲティのレシピ

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

数値を丸数字①②③~に変換する

丸数字(1) ' = ①
丸数字(24) ' =㉔

のように、丸数字(n)を①②…に変換する関数がこちらです。

お忙しい方は、ソースコードをコピーして、使い方のように呼び出すだけでOKです。
コードをしっかり読みたい方は、解説をどうぞ。

ソースコード

Function 丸数字(ByVal n As Long) As String
    Select Case n
    Case 1 To 20
        丸数字 = Chr(Asc("①") + n - 1)
        
    Case 21 To 50
        丸数字 = ChrW(12881 + n - 21)
        
    Case 0
        丸数字 = ChrW(9450)
        
    Case Else
        丸数字 = "(" & n & ")"
    End Select
End Function

これで、⓪~㊿までの丸数字が作れます。

それ以外の数値も、一応「(72)」と、カッコ付けにして返します。

コードの解説

まずは、「1~20を①~⑳に変換」している部分を、「6」を例に説明します。

丸数字 = Chr(Asc("①") + n - 1)
  1. 「Asc("①")」で、「①」の文字コードを調べる
  2. ①、②、③は文字コードが連続しているので、①の文字コードに6-1を足して⑥の文字コードを作る。
  3. 作った⑥の文字コードを、Chr関数で呼び出せば完成。

という仕組みで、①~⑳を作っています。


㉑~㊿も同じ理屈です。

ただ、①~⑳とは違うところにある環境依存文字なので、
Chr関数でなく、ChrW関数で呼び出します。
 ※ 正確には、Chr:「Shift-JIS」、ChrW:「Unicode」の文字を呼び出します。

丸数字 = ChrW(AscW("㉑") + n - 21)

と書きたいのですが、UnicodeはVBEに打つと「?」になってしまうので、
しょうがないからAscW("㉑")の返り値12881をベタ打ちしています。


⓪は他の丸数字と違うところにポツンとあるので、特別に処理します。
それ以外の数値は丸数字がないので、しょうがないから(64)とかにしてあげます。


以上です。


まあ文字コードを計算して扱うなんて、めったに出てきません。

そんなことより、

' 1~20の条件分岐の書き方2パターン

' ① If
If n >= 1 And n <= 20 Then

' ② Select Case
Case 1 To 20

後者が圧倒的に読みやすいので、
数値を区間ごとに分岐させるのは、IfよりSelect Caseがおすすめ」ってのが、
案外このページで1番大事な話だったかもしれません。