- ベストアンサー
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 で出来ると思うのですが、シート上に埋め込むチェックボックスですと、どうにも上手く動いてくれません。 丁寧に全部書いていけばいいのですが、行が沢山増えてしまい見にくいのと、数字の書き間違いが出たりして作業が煩瑣なので、 可能であればまとめて処理してしまいたいと考えています。 どうぞよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 前の回答をして気付いたんですが、もっと簡単な方法がありました。 For i = 1 To 100 OLEObjects("CheckBox" & i).Object.Value = True Next i
その他の回答 (3)
- nag0720
- ベストアンサー率58% (1093/1860)
#1です。回答が中途半端でしたね。 #2さんのコードを転用させてもらって、 If Left(Obj.Name, Len("checkbox")) = "CheckBox" Then Obj.Object.Value = True End If
- imogasi
- ベストアンサー率27% (4737/17070)
#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が出来ないようだが、間違いかもしれないので考えます。
お礼
ありがとうございました。おかげさまで処理できました。 また何かありましたらよろしくお願いいたします。
- nag0720
- ベストアンサー率58% (1093/1860)
下記のコードでシート上の全コントロールを処理できます。 Dim Obj As OLEObject For Each Obj In OLEObjects ・・・ Next Obj
お礼
おお! やっぱり出来るんですね。知りませんでした。 どうもありがとうございました。 また何かありましたらよろしくお願いいたします。