エクセルマクロで、セル内のチェックボックスの有無を確認するVBAコードをご紹介します。
このページのマクロコードは、コピペで使えます。
ぜひ、お試しください。
セル内のチェックボックスの有無を判定(パターン①)
以下のExcelVBAを実行すると、セル上のチェックボックス有無を判定します。
Sub チェックボックスがセル上にあるかどうか判定()
Dim cb As checkbox
Dim x As Long
Dim i As Long
Dim j As Long
Dim a(18) As Variant
'すでにチェックボックスがある行番号を配列格納
i = 1
For Each cb In ActiveSheet.CheckBoxes
a(i) = Split(cb.TopLeftCell.Address, "$")(2)
i = i + 1
Next cb
'B列 2~4行目までループ
For i = 2 To 4
'判定用
x = 0
'配列ループ
For j = 1 To UBound(a)
'セルにチェックボックスがあるか確認
If i = Int(a(j)) Then
x = 1
Exit For
End If
Next j
'判定結果をセルへ転記
If x = 0 Then
Cells(i, 3) = "無し"
Else
Cells(i, 3) = "有り"
End If
Next i
End Sub
マクロ実行後
B列のチェックボックス有無を取得し、結果をC列へ表示します。
チェックボックスのオブジェクトの左上端が、
セル内に収まっている状態でマクロを実行してください。
セル内のチェックボックスの有無を判定(パターン②)
以下のExcelVBAを実行すると、セル上のチェックボックス有無を判定して、なければチェックボックスを挿入します。
Sub チェックボックスがセル上にあるか判定して挿入()
Dim cb As checkbox
Dim x As Long
Dim i As Long
Dim j As Long
Dim a(18) As Variant
Dim StartX As Single
Dim StartY As Single
Dim EndX As Single
Dim EndY As Single
'すでにチェックボックスがある行番号を配列格納
i = 1
For Each cb In ActiveSheet.CheckBoxes
a(i) = Split(cb.TopLeftCell.Address, "$")(2)
i = i + 1
Next cb
'B列 2~18行目までループ
For i = 2 To 18
'判定用
x = 0
'配列ループ
For j = 1 To UBound(a)
'すでにチェックボックスがあれば、チェックボックスを追加しない
If i = Int(a(j)) Then
x = 1
Exit For
End If
Next j
'チェックボックスがない行に、チェックボックスを追加する
If x = 0 Then
With Cells(i, 2)
StartX = .Left + .Width / 2 - 8
StartY = .Top
EndX = .Left - .Left
EndY = .Height
'チェックボックス作る
ActiveSheet.CheckBoxes.Add(StartX, StartY, EndX, EndY).Select
'チェックボックスのテキストを指定
Selection.Text = ""
'セルに合わせて移動やサイズを変更する
Selection.Placement = xlMoveAndSize
End With
End If
Next i
End Sub
マクロ実行後
B列でチェックボックスがないセルに、チェックボックスを挿入します。
チェックボックスのオブジェクトの左上端は、
すべてセル内に収まっている状態です。
この記事がお役に立ちますと幸いです。
・【エクセルマクロ】チェックボックス処理を自動化まとめ
【エクセルマクロ】チェックボックスを自動操作:使用例16選
...
「たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】」
「5時間かかる作業が3時間でできます」ではなく「1秒で終わらせます」へ
毎日の業務を瞬時に終わらせるしくみを解説
リンク