チェックボックスをマクロで一括作成、一括リンクセルを作成する Excel塾のマクロ講座 動画編 39回

チェックボックスをマクロで一括作成、一括リンクセルを作成する

マクロ講座 2022年度動画編 39回
マクロ講座

動画でExcelVBA チェックボックスをマクロで一括作成、一括リンクセルを作成する

チェックボックスをマクロで一括作成、一括リンクセルを作成する

Excel塾のマクロ講座 動画編 39回「マクロ講座チェックボックスをマクロで一括作成、一括リンクセルを作成する、フォームコントロールのチェックボックスを詳しく解説」です。

チェックボックスはアンケートや集計に便利な機能です。
ただ使うまでの準備が大変です。
そしてチェックを入れるだけでなく、カンタンに集計したりしたいわけですが、それにはリンクセルを設定しなければならないわけです。
しかし、それも結構面倒です。 今回の講義では、チェックボックスを必要な個数カンタンに作れ、リンクセルを設定するマクロを作成します。

マクロ動画 チェックボックスをマクロで一括作成、一括リンクセルを作成する

チェックボックスを作るにはどんなコードを書けばいいか

  1. サンプルは国内旅行の持ち物のチェックリストです。
    持ち物を忘れないようにバッグに入れたかどうかをチェックする、チェックリストを作成したいと思います。
    隣の B 列にチェックボックスを作成していきます。

    NAMAE1
  2. チェックボックスを作成するには、この 開発タブにあるコントロールグループから挿入ボタンを押して 作成することができます。
    上はフォームコントロール、 下はアクティブXコントロールというものです。

    NAMAE2
  3. さてはじめに復習を兼ねて、チェックボックスを手動で作成してみましょう。しかしただつくるのではなく、記録のマクロを利用して、どのようなコードが使われるのかを確認します。

    NAMAE3
  4. B2セルにチェックボックスを作成し、C 2セルにはリンクさせました。

    NAMAE4
  5. どんなコードが記録されたか見てみましょう。
    ActiveSheet.CheckBoxes.Add
    の後ろの数値は、まず、左からの距離、上からの距離そして幅と高さが入っています。
    この数値を指定することで好きな位置にチェックボックスを配置することができます。

    NAMAE5

チェックボックスコードの読み解き

  1. そしてチェックボックスに自動的に入れられたテキストを消しました。
    Selection.Characters.Text = ""

    NAMAE6
  2. Selection.Cut
    これは右クリックからの切り取りのことで、チェックボックスを削除しました。

    NAMAE7
  3. 再びチェックボックスを作成しています。
    この時は Selection.Characters.Text = "check 23と" 
    に入っている文字列 check 23というのは消さないでおきました。
    With Selection 以降は、 チェックボックスを右クリックして設定できる項目、コントロールの祖初期設定のコントロールタブのところです。

    NAMAE8
  4. LinkedCellは必要なので使いましょう。またDisplay3DShadingも残しておきましょう。
    すると、不要な部分をのこしたマクロのコードは、このようにシンプルになりました。

    NAMAE9
  5. チェックボックスとリンクしたセルを作成できました。実際には、チェックボックスの位置が悪くて、手動で訂正しています。

    NAMAE10

チェックボックス作成マクロを作る

  1. これで一番問題なのはチェックボックスを設定するときの位置だということがわかったわけですけれども、その位置をどのように決めたら良いかというところが難しい点です。

    ActiveSheet.CheckBoxes.Addに必要なのは、位置情報です。
    シート上で規則的に並んでいるのはセルですから、 セルの左上の位置や右上の位置を取得することはできます。
    そういったセル位置を利用することにしましょう。

    NAMAE11
  2. もともとチェックリストですから、指定したセルに一個ずつチェックボックスを入れていきたいので、
    その対象となるセルの上からの距離、そして左からの距離、セルの幅、セルの高さを使います。

    cTop = Cells(i, 2).Top
    cLeft = Cells(i, 2).Left
    cwidth = Cells(i, 2).Width
    cheight = Cells(i, 2).Height
    ActiveSheet.CheckBoxes.Add(cLeft, cTop, cwidth, cheight).Select
    
  3. with 文を使って、選択したチェックボックスに、リンクドセルを隣のセルに対して設定します。

    With Selection
         .LinkedCell = Cells(i, 2).Offset(0, 1).Address
    End With
    
  4. 全体のコードはこのようになります。
    サンプルでは2行目から21行目まで B 列に対してチェックボックスを作成し、その隣オフセット01のセルに対してリンクしたセルを設定しています。

    Sub Makeチェックボックス()
        Dim cTop As Double, cLeft As Double, cwidth As Double, cheight As Double
        Dim i As Long
        For i = 2 To 21
            With Cells(i, 2)
                cTop = Cells(i, 2).Top
                cLeft = Cells(i, 2).Left
                cwidth = Cells(i, 2).Width
                cheight = Cells(i, 2).Height
                ActiveSheet.CheckBoxes.Add(cLeft, cTop, cwidth, cheight).Select
                Selection.Characters.Text = ""
                With Selection
                    .Value = xlOn
                    .LinkedCell = Cells(i, 2).Offset(0, 1).Address
                End With
            End With
        Next i
    End Sub
    
  5. With Selection に対して、
    .Value = xlOn でコードを書いているので、全てのチェックボックスが TRUE になっています。

    NAMAE15

    チェックボックスのチェックをまとめてチェック解除する

  1. フォームコントロールのチェックボックスのチェックを一括ではずすマクロです。

    Sub フォームチェックボックスをチェック解除()
      ActiveSheet.CheckBoxes.Value = False
    End Sub
  2. フォームコントロールのチェックボックスのチェックを一括で入力するマクロです。

    Sub フォームチェックボックス全部チェック()
      ActiveSheet.CheckBoxes.Value = True
    End Sub

作成してあるチェックボックスを一括削除

  1. チェックボックスを全部削除して、作り直したいとかいうこともあるかもしれません。
    あるいは練習に一括削除したいということもあるかもしれません。
    こちらのコードはシート上のチェックボックスをまとめて削除するマクロです。

    Sub フォームチェックボックス一括削除1()
        Dim checkbox As checkbox
        For Each checkbox In ActiveSheet.CheckBoxes
            checkbox.Delete
        Next
    End Sub
    
    Sub フォームチェックボックス全部削除2()
      ActiveSheet.CheckBoxes.Delete
    End Sub
    
  2. 今までチェックボックスはチェックするのにはとてもいいんだけれども、作成するのが、面倒だということで、なかなか使用に踏み切れなかった方も、 簡単にチェックボックスとリンクしたセルを必要な数をすぐ作れますのでぜひお試しください。