• ベストアンサー

EXCELのシート上に埋め込んだチェックボックスの一括処理方法について

EXCEL VBAのコード記載方法について教えていただきたいことがあります。 Sheets("Test")上にコントロールツールボックスのチェックボックスを 100個とコマンドボタンを1個配置する。 コマンドボタンをクリックすると、CheckBox1~100を全てTrueにする。 これを、 Private Sub CommandButton1_Click() Sheets("Test").CheckBox1 = True Sheets("Test").CheckBox2 = True ・ ・ ・ End Sub と100回書くのではなく、配列化して記載することは可能なのでしょうか。 ユーザーフォームのチェックボックスであれば Dim i As Integer For i = 1 To 100 UserForm1.Controls("CheckBox" & i) = True Next i で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

#1です。 前の回答をして気付いたんですが、もっと簡単な方法がありました。 For i = 1 To 100  OLEObjects("CheckBox" & i).Object.Value = True Next i

takohasisa
質問者

お礼

おお! やっぱり出来るんですね。知りませんでした。 どうもありがとうございました。 また何かありましたらよろしくお願いいたします。

その他の回答 (3)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.3

#1です。回答が中途半端でしたね。 #2さんのコードを転用させてもらって、 If Left(Obj.Name, Len("checkbox")) = "CheckBox" Then   Obj.Object.Value = True End If

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

#1の考え方なら Sheet1での例 Sub test01() Dim Obj As OLEObject For Each Obj In Worksheets("Sheet1").OLEObjects If Left(Obj.Name, Len("checkbox")) = "CheckBox" Then MsgBox Obj.Name End If Next Obj End Sub Worksheets("Sheet1").を入れる。 If Left(Obj.Name・・でコマンドボタンを拾わないようにする。 MsgBox Obj.Name ここにチェックボックスをTrueにするコードを入れる。 しかしObj.Value=Trueが出来ないようだが、間違いかもしれないので考えます。

takohasisa
質問者

お礼

ありがとうございました。おかげさまで処理できました。 また何かありましたらよろしくお願いいたします。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

下記のコードでシート上の全コントロールを処理できます。 Dim Obj As OLEObject For Each Obj In OLEObjects ・・・ Next Obj

関連するQ&A