丸数字(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 35 丸数字 = ChrW(12881 + n - 21) Case 36 To 50 丸数字 = ChrW(12977 + n - 21) Case 0 丸数字 = ChrW(9450) Case Else 丸数字 = "(" & n & ")" End Select End Function
これで、⓪~㊿までの丸数字が作れます。
それ以外の数値も、一応「(72)」と、カッコ付けにして返します。
コードの解説
まずは、「1~20を①~⑳に変換」している部分を、「6」を例に説明します。
丸数字 = Chr(Asc("①") + n - 1)
- 「Asc("①")」で、「①」の文字コードを調べる
- ①、②、③は文字コードが連続しているので、①の文字コードに6-1を足して⑥の文字コードを作る。
- 作った⑥の文字コードを、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番大事な話だったかもしれません。