• ベストアンサー

CheckBoxの配列化

Excel2000のVBAで以下のような処理をしたいのでご教示願います。 Userform1にCheckBox1~CheckBox10の10個のチェックボックスがあったとして以下のようにFor文でまとめて処理したいのですがうまくいきません。  For I = 1 to 10   UserForm1.CheckBox(I).value = True  NEXT

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

例えばこんな感じとか、、、 Private Sub CommandButton1_Click() Dim cb As Control  For Each cb In Me.Controls   If TypeName(cb) = "CheckBox" Then     cb.Value = Not cb.Value   End If  Next cb End Sub

purin-chan
質問者

お礼

ありがとうございました。 この方法で質問した内容の処理ができることは確認できました。 この方法はすべてのチェックボックスが対象になってしまうのですね。 当方の質問の仕方が悪かったのですが、ケースバイケースでチェックボックスを限定して処理(例えば1~20のチェックボックスがあって、そのうち1~10、11~20を分けてFor文で処理したいケース)もあって、こういった場合、どうしたらいいのかなぁと考えていたのですが、そのときに#5さんから#1さんのアレンジした回答を頂き何とか解決することができました。

その他の回答 (4)

  • gonic
  • ベストアンサー率30% (18/59)
回答No.5

どうしても配列にしたければ、#1の方の要領で オブジェクト変数の配列にぶち込んじゃうとか。 Const cb_num = 10 Dim cb(cb_num) As Control Dim ctrl As Control Dim i As Integer i = 0 For Each ctrl In Me.Controls  If TypeName(ctrl) = "CheckBox" Then   i = i + 1   If i > cb_num Then Exit For   Set cb(i) = ctrl  End If Next ctrl For i = 1 To cb_num  cb(i).Value = Not cb(i).Value Next i

purin-chan
質問者

お礼

ありがとうございました。 #1さんへのお礼にも書かせてもらったのですが、全てのチェックボックスだけでなく限定したチェックボックスにFor文で処理したいケースもあったので#5さんの方法でうまく解決できました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

#1です。#3に反応しちゃいました。 #3さんへ マルチポストに対するモーグの主張は理解出来ますが、より適切なコミュニティに誘導する行為だって、その場が終了する形であればマルチポストやネチケット違反にはならないと私は思います。 質問者 : ○○について知りたい          ↓ 回答者 : その関連なら ××で聞くと良いよ。詳しい人が多いから。          ↓ 質問者 : [解決] 情報ありがとう、そちらで質問してみます。 これらを認めていないというのはモーグのマイルールで「モーグの掲示板」に書き込みする際のルールだと思います。(ある意味ではモーグで解決不可な場合を想定していないとも言えますね) モーグのマイルールが他のサイトの運営を抑制出来るものでは無いと思いますが、如何でしょう?

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

お~っと、モーグ は他のコミュニテイサイト の紹介はサイト規約違反ですよ。 逆もまた真なり?

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

VBAでは対応していないので、工夫が必要です。 下記を参考にしてください。

参考URL:
http://www.moug.net/skillup/opm/opm08-01.htm,

関連するQ&A