Excel VBA チェックボックスの一括オン、オフ

このQ&Aのポイント
  • Excel VBAでチェックボックスの一括オン、オフを可能にする方法について説明します。
  • 2つのマクロを作成し、それぞれチェックボックスのオン、オフが一括でできるようになりましたが、1つにまとめることはできるでしょうか?
  • また、1回クリックすると一括オン、もう一度クリックすると一括オフを繰り返すような仕組みも実現したいです。
回答を見る
  • ベストアンサー

Excel VBA チェックボックスの一括オン、オ

1.2.のように2つマクロを作成し、それぞれチェックボックスのオン、オフが一括でできるようになったのですが、1つにまとめることはできますでしょうか? 1回クリックすると、一括オン、もう一度クリックすると一括オフを繰り返すようにしたいです。 1.チェックオフ Dim myobj As OLEObject For Each myobj In ActiveSheet.OLEObjects If TypeName(myobj.Object) = "CheckBox" Then _ myobj.Object.Value = False Next 2.チェックオン Dim myobj As OLEObject For Each myobj In ActiveSheet.OLEObjects If TypeName(myobj.Object) = "CheckBox" Then _ myobj.Object.Value = True Next

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

Public変数か、何処かの適当なセルに一括変更状態(True/False)を入れておき、次回の一括変更はその逆を設定します。 Dim myobj As OLEObject Dim ck As Boolean ck = Not Range("Z1") For Each myobj In ActiveSheet.OLEObjects   If TypeName(myobj.Object) = "CheckBox" Then myobj.Object.Value = ck Next Range("Z1") = ck

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

チェックトグル Dim myobj As OLEObject For Each myobj In ActiveSheet.OLEObjects If TypeName(myobj.Object) = "CheckBox" Then _ myobj.Object.Value = not myobj.Object.Value Next かな。

関連するQ&A

  • Excel VBA 複数あるオプションボタンの処理

    excel VBAで、複数あるグループ内のオプションボタンを、グループ別にまとめてoffにする方法を探しております。 下のcodeではsheet上のすべてのオプションボタンをoffに出来ますが、グル-プ別にしたいのです。 In ActiveSheet.グループ1.OLEObjectsみたいに(これはNGでした)。 Dim myObj As OLEObject For Each myObj In ActiveSheet.OLEObjects If myObj.progID = "Forms.OptionButton.1" Then  myObj.Object.Value = False End If 宜しくお願い致します。

  • Excel VBA 動的に作成したチェックボックスにイベントを追加したい

    http://oshiete1.goo.ne.jp/qa504573.html を参考にしたのですがエラーが出ます。 ------標準モジュール------- Dim NewChkBox As New Class1 Sub main() Dim oObj As OLEObject Set oObj = ActiveSheet.OLEObjects.Add(classtype:="forms.checkbox.1") oObj.Top = 10 oObj.Left = 10 NewChkBox.cb = oObj Set oObj = Nothing End Sub ---------クラスモジュール-------- Public WithEvents cb As Checkbox Private Sub cb_Click() MsgBox "You clicked the checkbox." End Sub 実行すると、 「オブジェクトはオートメーションイベントを発生させることができません。」 というエラーメッセージが出ます。 OLEObjectで作成したコントロールに イベントを追加するにはどのようにしたら良いのでしょうか?

  • Excel VBA 複数シートの一括印刷について

    標記の件、御指導願います。 シート1:印刷設定(チェックボックスが印刷したいシート分あります) シート2~34:チェックボックスがオンである表題のシートを選択し一括で印刷する。 を、VBAで作ってみましたが、エラー(インデックスが有効範囲にありません)が出てしまいます。 Sub CheckBoxPrint() Dim ArrySheet() As String Dim I As Long Dim k As Long k = 0 For I = 1 To 33 If ActiveSheet.OLEObjects("CheckBox" & I).Object.Value = True Then ReDim Preserve ArrySheet(k) ArrySheet(k) = ActiveSheet.DrawingObjects("CheckBox" & I).Object.Caption k = k + 1 End If Next I ThisWorkbook.Worksheets(ArrySheet).PrintOut ←エラー(インデックスが有効範囲にありません) Erase ArrySheet End Sub     このエラーを回避する方法を御指導してください。 よろしくお願い致します。

  • フォームのCheck boxとOLEObjectのCheckboxのマクロの違い?

    エクセル2003です。 ワークシート上に複数個のチェックボックスを配置し、オンの場合、その左隣のセルの値を返すマクロを作成する場合についての質問です。 普段はフォームのCheck boxを使っています。 フォームのCheck boxなら Sub ChkBx() With ActiveSheet.CheckBoxes(Application.Caller) If .Value = xlOn Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub と、標準モジュールに一つだけプロシージャを書いて、複数個のCheck boxに同一のマクロを登録すれば簡単に出来ます。 ところがこれをOLEObjectのCheckboxでやってみようと思ったところ、フォームのように一つのプロシージャを使いまわすことができず、シートモジュールに以下のように各Checkboxごとのマクロを書かなくてはいけないようです。 Private Sub CheckBox1_Click() With OLEObjects("CheckBox1") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox2_Click() With OLEObjects("CheckBox2") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub Private Sub CheckBox3_Click() With OLEObjects("CheckBox3") If .Object.Value Then MsgBox .TopLeftCell.Offset(0, -1).Value End If End With End Sub 3つや4つくらいならどうってことはないのですが十数個もあるとかなり面倒です。 OLEObjectのCheckboxでももっと簡単にする方法はないのでしょうか? それともわたしが何かOLEObjectのCheckboxの使い方について思い違いをしているのでしょうか? ご教示をお願いいたします。

  • エクセル VBA CheckBox名に変数を使用

    エクセル VBA CheckBoxのオブジェクト名に変数を使用して 値を取得したいのですが・・・ If ActiveSheet.OLEObjects(TempName).Object.Value = True Then          (処理) Else          (処理) End If 「実行時エラー '1004': OLEObject クラスのオブジェクトのプロパティを取得できません。」 というエラーがでてしまいます。 何が原因なのかわかる方是非ご教授ねがいます。

  • vbaでnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • エクセルVBAで xlOn xlOff の切替

    エクセル2000です。 ワークシート上に配置したオブジェクトのVisibleのTrue Falseについては、test01の方法で切り替えることが出来ます。 では、Test02でIfで判定している、xlOn xlOff の切替についても同様にNOTを使って簡単に記述することはできないでしょうか?xlOn xlOff はTrue False ではないから無理なのでしょうか? Sub test01() Dim o As Object For Each o In ActiveSheet.Buttons o.Visible = Not o.Visible Next o End Sub Sub test02() Dim o As Object For Each o In ActiveSheet.CheckBoxes If o.Value = xlOn Then o.Value = xlOff Else o.Value = xlOn End If Next o End Sub

  • Excel VBAでCheckboxの名前を変数にとって値を調べたい

    Excel VBAでCheckboxの名前を変数にとって値を調べたいのです. シートにCheckboxがたくさん貼ってあり名前とOn,Offを調べたいのですが下記では名前は調べられてもOn,Offが確認できないのですが On,Offを別変数にとる場合タイプはなににすればいいでしょうか。 たとえば dim i as integer dim checkname() dim checvalue() as ???? i=0 for i=1 to 2 If Mid(ActiveSheet.Shapes(i).Name, 1, 5) = "Check" Then i=i+1 redim preserve checkname(i) checkname(i)=ActiveSheet.Shapes(i).Name redim preserve checvalue(i) checvalue(i)=ActiveSheet.Shapes(i).value <---これではエラー end if next i

  • Excel VBA チェックボックスの判断

    下記のようなマクロでチェックボックスを作成したのですが、その作成したチェックボックスをクリックしたときに、ある処理を実行させるようにするにはどうすればいいのでしょうか? よろしくお願いします。 Dim Max as Long Dim Cell as Range Dim Check as CheckBox ・ ・ ・ For i = 0 To Max   With Cell.Offset(i)   Set Check = ActiveSheet.CheckBoxes.Add_     (Left:=.Left,Top:=.Top, Width:=.Width, Height:=.Height)   End With   With Check   .LinkedCell = Cell.Address   .Caption = ""   .Value = False   End With Next

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

専門家に質問してみよう