0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Excel VBA] 数字を丸囲み数字に変換する

Last updated at Posted at 2024-08-16

ざっくり説明

数字を渡すと丸囲み数字(丸付き数字/丸数字)にしてくれます。

ex.
ConvertToCircledNumber (15) → "⑮"
ConvertToCircledNumber (43) → "㊸"

コード

数字を丸数字に変換
Function ConvertToCircledNumber(ByVal num As Long) As String
'================================
'用途  :数字の丸囲み数字への変換
'--------------------------------
'第一引数:数字 (Long型)
'戻り値 :丸囲み数字 (String型)
'================================
    Dim circledNumber As String

    Select Case num
    Case 0
        circledNumber = ChrW(&H24EA)
    Case 1 To 20
        circledNumber = ChrW(&H2460 + num - 1)
    Case 21 To 35
        circledNumber = ChrW(&H3251 + num - 21)
    Case 36 To 50
        circledNumber = ChrW(&H32B1 + num - 36)
    Case Else
        circledNumber = "(" & num & ")"
    End Select

    ConvertToCircledNumber = circledNumber
End Function

使用方法

第一引数に0以上の整数を渡す

仕様等

  • 0~50については丸文字に変換します (ex. ㉔, ㉝, ㊼, ⓪)
  • 51以上に関しては「(51)」のように括弧で囲み、代替としています

注意点

  • ⓪と、㉑~㊿は、MsgBoxやローカルウィンドウで「?」表示となってしまいます
  • 小数を渡すと四捨五入された値が処理されて返ってきます (※1 厳密には違う)
  • マイナスの値を渡すと「(-3)」のような表記になります
    → 0以上の整数を渡すように呼び出し元で調整してください。
  • セルに入力されている括弧で囲まれた数字はマイナスの数値として扱われるので
    マクロ実行前に入力対象セルの書式を文字列にしておく/
    出力文字列の先頭にシングルクォーテーションを付ける、等の対処をお願いします

    → 後者ならElseで実行される部分を「circledNumber = "'(" & num & ")"」にするだけ

その他

小数を受け付けない/マイナスを処理しない、という仕様にできるけれど、
呼び出し元のサブルーチンなり関数なりが困っちゃうと思うのでやめました。
If文よりCase文の方が可読性が高いと思います


※1 小数の丸め処理について
エクセルVBAでは、マクロ内で小数をLong型に渡した場合は切り捨てられますが、
セルの値などを取得して渡した場合などに偶数丸め(銀行丸めとも)という処理が走ります。

偶数丸めとは基本的に四捨五入と似た動きをするのですが、
x.5 という値の場合は偶数側に丸められます。
例えば2.5を偶数丸めすると2となります。
x.5の場合でしか起きないため、2.500000001は3になります。

この動きは(VBAの)Round関数にも働きます。

1点面白いことがあり、エクセルにはワークシート関数とVBAの関数があり
丸め処理をするRound関数は各々動きが違います。

WorksheetFunction.Round(2.5, 0) → 3
Round(2.5, 0) → 2

という挙動です。
いつか「なんか想定の値と違う!」という事が起こりそうだなって感じてます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?