選択範囲の文字列をチェックボックス(フォームコントロール)に置き換える

先日は、選択セルにチェックボックスを配置する関数に挑戦した。
infoment.hatenablog.com

それで、実際にどのような使い方が良いか、色々と思案してみた。
f:id:Infoment:20191107223634p:plain

ああでもない、こうでもないと悩むこと二日。
結局シンプルに、次の用法に落ち着いた。

選択範囲の文字列を、チェックボックスに置き換える

方針さえ決まれば、後は愚直に作りこむだけだ。

まず、ユーザーフォームを準備し、以下のように配置する。
f:id:Infoment:20191107224001p:plain

各オブジェクトの名前は、各位お好みでOK。
置き換える範囲が飛び石になっている場合を考慮して、最初から「空白無視」にチェックを入れておく。

Private Sub UserForm_Initialize()
    ' 初期値は、空白無視とする。
    ' ※使い勝手を考慮。
    IgnoreBlankCheck = True
End Sub

終了ボタンを押した場合の処理がこちら(ど定番)。

Private Sub CloseButton_Click()
    Unload Me
End Sub

最後に、配置ボタンがこちら。
配置に関しては、前回作成済みマクロを呼び出している。

Private Sub SetCheckBoxButton_Click()
    Dim r As Range
        For Each r In Selection
            ' 空白を無視しないか、または空白でない場合のみチェックボックス配置。
            If IgnoreBlankCheck = False Or r.Value <> vbNullString Then
                ' CheckBox配置。
                SetCheckBox r, , r.Value
                ' 置き換えのため、セルの文字を削除。
                r.ClearContents
            End If
        Next
End Sub

条件分岐が、少々ややこしい。

  1. 空白を無視する設定であり
  2. 且つ
  3. 空白の場合は
  4. セットしない

を全てひっくり返すと、

  1. 空白を無視する設定ではない
  2. 又は
  3. 空白ではない場合は
  4. セットする

となる。

結果はこちら。
f:id:Infoment:20191107225101g:plain

もう少し続きます。

参考まで。