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

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

【Excel VBA】複数行にチェックボックスを自動配置するマクロを作成した

   

Excelで「行ごとにチェックボックスを配置したい」という場面は意外と多いです。しかし、手作業でひとつずつ配置するのはとても面倒です。そこで今回は、VBAで指定した範囲にチェックボックスを一括で追加し、対応するリンクセルも自動で設定するマクロを作成しました。

このマクロでは、以下の処理を行います。

  • 対象のシート(例:Sheet1)を選択
  • A列の4行目から28行目にチェックボックスを一括配置
  • 各チェックボックスのリンクセルをB列に設定
  • 既存のチェックボックスがあれば削除

作成したVBAコードは以下のとおりです。

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
    
    ' 対象のシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' チェックボックスを配置する行と列を指定
    startRow = 4
    endRow = 28
    targetColumn = "A"
    linkColumn = "B"
    
    ' 既存のチェックボックスを削除
    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
        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)
        
        chkBox.Name = "CheckBox_" & i
        chkBox.TextFrame.Characters.Text = ""
        chkBox.ControlFormat.LinkedCell = ws.Cells(i, linkColumn).Address
    Next i
    
    MsgBox "チェックボックスを " & endRow - startRow + 1 & " 個配置しました!"
End Sub
 

 

このマクロを実行するとこんな感じになります。

 

スポンサーリンク

 - Excel, VBA