以前に任意の範囲の丸数字を出力できるアドインを作成しました。
ところが使っている内に縦方向だけでなく、横方向にも出力したいという思いが出てきました。
と思った時に改良できるのが自作マクロの良いところ。
サクッと改良してみました。
完成品
追加した機能は『選択範囲に丸数字を出力』する機能です。
構成
丸数字ジェネレーターはユーザーフォームとモジュールから構成されています。
今回変更したのは『ufm_丸数字作成』のみです。

コード
改良前のコードは下記のとおりです。
Option Explicit Private Sub CommandButton1_Click() Dim z開始数 As Long Dim z終了数 As Long If IsNumeric(Me.TextBox1.Value) And IsNumeric(Me.TextBox2.Value) Then Dim var As Variant var = kf丸数字作成(Me.TextBox1.Value, Me.TextBox2.Value) ActiveCell.Resize(UBound(var), 1).Value = var Else MsgBox "テキストボックスには1~50の整数を入力してください", _ vbCritical + vbOKOnly, "入力エラー" End If End Sub
以下が改良後のコードになります。
Option Explicit Private Sub CheckBox1_Change() If Me.CheckBox1.Value Then Me.TextBox1.Enabled = False Me.TextBox2.Enabled = False Me.TextBox1.BackColor = &HE0E0E0 Me.TextBox2.BackColor = &HE0E0E0 Me.Label3.Caption = "※選択範囲に丸数字を入力します" Else Me.TextBox1.Enabled = True Me.TextBox2.Enabled = True Me.TextBox1.BackColor = vbWhite Me.TextBox2.BackColor = vbWhite Me.Label3.Caption = "※1~50までの整数を入力" & vbCrLf & "アクティブセルから下方向に丸数字を入力します" End If End Sub Private Sub CommandButton1_Click() Dim z開始数 As Long Dim z終了数 As Long '--実行前チェック If Me.CheckBox1.Value = False And Not (IsNumeric(Me.TextBox1.Value) And IsNumeric(Me.TextBox2.Value)) Then MsgBox "テキストボックスには1~50の整数を入力してください", vbCritical + vbOKOnly, "入力エラー" Exit Sub End If '--作成数チェック If Me.CheckBox1.Value = False Then z開始数 = Me.TextBox1.Value z終了数 = Me.TextBox2.Value Else z開始数 = 1 z終了数 = WorksheetFunction.Min(50, Selection.Count) End If '--丸数字作成 Dim var As Variant var = kf丸数字作成(z開始数, z終了数) '--丸数字転記 Dim myRng As Range Dim i As Long: i = 1 If Me.CheckBox1.Value = False Then ActiveCell.Resize(UBound(var), 1).Value = var Else For Each myRng In Selection myRng.Value = var(i, 1) i = i + 1 If i = 51 Then Exit For Next End If End Sub
だいぶ増えてしまいましたが、ユーザーフォーム上のチェックボックスの状態で処理を分岐させるために増えたもので、丸数字を作成するメインにロジックに関しては何も変わっていません。
解説
CheckBoxで処理を変更
ユーザーフォームを呼び出し時には新しく追加したCheckBoxにチェックが付いた状態になっています。
この状態の時に新しい機能『選択範囲に丸数字を入力する機能』が実行されます。
CheckBoxのチェック状態によってユーザーフォームの表示を変更しています。

Private Sub CheckBox1_Change() If Me.CheckBox1.Value Then Me.TextBox1.Enabled = False Me.TextBox2.Enabled = False Me.TextBox1.BackColor = &HE0E0E0 Me.TextBox2.BackColor = &HE0E0E0 Me.Label3.Caption = "※選択範囲に丸数字を入力します" Else Me.TextBox1.Enabled = True Me.TextBox2.Enabled = True Me.TextBox1.BackColor = vbWhite Me.TextBox2.BackColor = vbWhite Me.Label3.Caption = "※1~50までの整数を入力" & vbCrLf & "アクティブセルから下方向に丸数字を入力します" End If End Sub
Command Button
作成ボタンを押したときの処理です。
今回の一番大きな変更箇所です。
ここでの処理は以下の2つを実行しています。 1. 丸数字を作成する範囲の決定 2. 決定した範囲をメインロジックである『kf丸数字作成』に渡す。 3. 配列で返ってきた丸数字リストをセルに転記
1の処理についてはチェックボックス状態で処理を分けています。
チェック無し:ユーザーフォームのテキストボックスの値を取得して範囲を決定
チェック有り:シート上の選択範囲から決定
チェックなしの場合は作成範囲に任意の数字を選択可能ですが、チェック有りの場合は1から始まる範囲を自動で算出します。
Private Sub CommandButton1_Click() Dim z開始数 As Long Dim z終了数 As Long '--実行前チェック If Me.CheckBox1.Value = False And Not (IsNumeric(Me.TextBox1.Value) And IsNumeric(Me.TextBox2.Value)) Then MsgBox "テキストボックスには1~50の整数を入力してください", vbCritical + vbOKOnly, "入力エラー" Exit Sub End If '--作成数チェック If Me.CheckBox1.Value = False Then z開始数 = Me.TextBox1.Value z終了数 = Me.TextBox2.Value Else z開始数 = 1 z終了数 = WorksheetFunction.Min(50, Selection.Count) End If '--丸数字作成 Dim var As Variant var = kf丸数字作成(z開始数, z終了数) '--丸数字転記 Dim myRng As Range Dim i As Long: i = 1 If Me.CheckBox1.Value = False Then ActiveCell.Resize(UBound(var), 1).Value = var Else For Each myRng In Selection myRng.Value = var(i, 1) i = i + 1 If i = 51 Then Exit For Next End If End Sub
まとめ
『選択範囲に丸数字を入力機能』を備えたことでより柔軟に丸数字を利用することが出来るようになりそうです。
