Excel
VBA
ExcelVBA

【ExcelVBA_ユーザー定義関数】オブジェクトの数をカウントする

記事の概要

自分の備忘録も兼ねて、気が向いたときに作成した関数を載せていきます:pencil2:

環境

・Excel2016
・Windows10

ユーザー定義関数

Public Function cntObjects(objName As String) As Long

 Dim obj As Object

       For Each obj In Sheet1.OLEObjects
          If obj.Name Like "*" & objName & "*" Then
             cntObjects = cntObjects + 1
          End If
       Next

End Function
補足

何をしているのかというと...

Sheet1の全てのオブジェクトを参照
→もしも、そのオブジェクト名にobjNameを含む場合
→cntObjectsを+1する

*今回は「Sheet1」を指定していますがここはご自身で変更してください。
*objNameには”TextBox”だの”OptionButton”だのを入れてください。

使用例

準備

開発タブ > 挿入 > ActiveXコントロール でCheckBoxを6つ挿入しました。
image.png

①CheckBoxの数をメッセージボックスに表示
Public Sub ex1()

       MsgBox cntObjects("CheckBox")

End Sub

image.png

②チェックが入ったCheckBoxの数をメッセージボックスに表示
Public Sub ex2()

 Dim i As Long
 Dim cnt As Long
 Dim buf As String

    buf = "CheckBox"

       For i = 1 To cntObjects(buf)
          If Sheet1.OLEObjects(buf & i).Object.Value = True Then
             cnt = cnt + 1
          End If
       Next i

       MsgBox cnt

End Sub

image.png

@Primar