非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Excel/VBA】チェックボックスをシート上に自動作成する方法

   

このVBAマクロは、指定したExcelワークシートの特定の範囲に、複数のチェックボックスを一括で自動で配置するプログラムです。開始行と終了行、そして配置する列を設定することで、その範囲のセルにきれいに収まるようにチェックボックスが作成されます。既存のチェックボックスを事前に削除する機能も備わっており、繰り返し実行しても重複してチェックボックスが作成されるのを防ぎます。これにより、手動で一つずつチェックボックスを挿入する手間が省け、効率的な作業が可能となります。

Sub AddCheckBoxes()
    ' 変数の宣言
    Dim ws As Worksheet           ' 処理対象のワークシートを格納する変数
    Dim i As Long                 ' ループ処理で使用するカウンタ変数
    Dim chkBox As Shape           ' 作成するチェックボックスを格納する変数
    Dim startRow As Long, endRow As Long ' チェックボックスを配置する開始行と終了行
    Dim targetColumn As String    ' チェックボックスを配置する列
    Dim linkColumn As String      ' チェックボックスのON/OFF状態と連動するセル(リンクセル)の列
    
    ' 対象のシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1") ' "Sheet1" を処理対象のワークシートとして指定
    
    ' チェックボックスを配置する行と列を指定
    startRow = 4        ' チェックボックスを配置する開始行(4行目)
    endRow = 28         ' チェックボックスを配置する終了行(28行目)
    targetColumn = "M"  ' チェックボックスを配置する列(M列)
    linkColumn = "M"    ' リンクセルを配置する列(M列)
    
    ' 既存のチェックボックスを削除
    ' 実行するたびにチェックボックスが重複して作成されるのを防ぐため、既存のものを一度全て削除します。
    For Each chkBox In ws.Shapes
        ' シェイプがフォームコントロールのチェックボックスであるかを確認
        If chkBox.Type = msoFormControl And chkBox.FormControlType = xlCheckBox Then
            chkBox.Delete ' 該当するチェックボックスを削除
        End If
    Next chkBox
    
    ' チェックボックスを一括で配置
    ' 指定された開始行から終了行までをループ処理
    For i = startRow To endRow
        ' チェックボックスを配置
        ' AddFormControlメソッドで、指定したセルの位置とサイズに合わせてチェックボックスを作成
        Set chkBox = ws.Shapes.AddFormControl(xlCheckBox, _
            ws.Cells(i, targetColumn).Left, _
            ws.Cells(i, targetColumn).Top, _
            ws.Cells(i, targetColumn).Width, _
            ws.Cells(i, targetColumn).Height)
        
        ' チェックボックスの名前を設定
        ' 識別しやすいように「CheckBox_」に続いて行番号を名前として設定
        chkBox.Name = "CheckBox_" & i
        
        ' チェックボックスのリンクセルを設定
        ' チェックボックスのチェック状態(TRUE/FALSE)を、同じ行の指定した列のセルに反映させます。
        chkBox.ControlFormat.LinkedCell = ws.Cells(i, linkColumn).Address
    Next i
    
    ' 完了メッセージを表示
    ' 作成したチェックボックスの数をメッセージボックスで表示
    MsgBox "チェックボックスを " & endRow - startRow + 1 & " 個配置しました!"
End Sub
 

 

スポンサーリンク

 - Excel, VBA