Edited at

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


記事の概要

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


環境


  • 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つ挿入しました。


①CheckBoxの数をメッセージボックスに表示

Public Sub ex1()

MsgBox cntObjects("CheckBox")

End Sub


②チェックが入った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