『マクロでチェックボックスを・・・』(お願いします) いつもお世話になっております。 本日もよろしくお願いします。 マクロでチェックボックスについたチェックをすべてクリアすることなどは、できるのでしょうか? チェックボックスがたくさんあり、シートは流用して使用するため初めにチェックをすべて外していく作業が面倒で仕方がありません。 もしできるようでありましたら、ご教授下さい。よろしくお願いします。 ---- フォームのチェックボックスかコントロールツールボックスのチェックボックスかわかりませんが とりあえず、両方対応のサンプルコードです。 Sub test() Dim obj As Object For Each obj In ActiveSheet.DrawingObjects If Replace(obj.Name, " ", "") Like "CheckBox*" Then Select Case obj.ShapeRange.Type Case msoFormControl: obj.Value = False 'フォームの場合 Case msoOLEControlObject: obj.Object.Value = False 'OLEオブジェクトの場合 End Select End If Next End Sub (momo) ---- '========================================================================== Sub test1() 'コマンドバー フォームの チェックボックスの場合 Dim chkbox As Object For Each chkbox In ActiveSheet.CheckBoxes chkbox.Value = 0 Next End Sub '=========================================================================== Sub test2() 'コマンドバー コントロールツールボックスのチェックボックス Dim ole As OLEObject For Each ole In ActiveSheet.OLEObjects If TypeName(ole.Object) = "CheckBox" Then ole.Object.Value = False End If Next End Sub こんな方法も参考程度に ichinose@仕事中 ---- 返信遅くなりまして、申し訳ありません。 フォームの チェックボックスなのですが、教えていただいた方法で無事たのですが、1点伺いたいことがございます。 マクロを実行すると、砂時計マークが出てかなり長い間処理をしているようなのですが、 チェックボックスのある範囲を指定して実行することで、処理は早くなったりするでしょうか? マクロが初心者なもので、1シートをすべて見ているから遅いのかな?なんて思い、質問させていただいております。 もし、おわかりになりましたらぜひ、よろしくお願いします(お願いします) ---- >シートは流用して使用するため 使い方の問題のような。 チェックボックスがすべてオフになっているシートを流用する。 あるいは、そのようなシートテンプレートを用意する。 もしくは,時間はかかるけれども,あらかじめ、チェックボックスと リンクするセルを設定しておいて、セルの方をクリアする。 みやほりん ---- みやほりん様 リンクするセルを設定していたのですが、リンクしているセルの表示をクリアしたら消えるのは知りませんでした。ありがとうございます。(お願いします) ---- これは、セルにリンクすることで処理速度が速くなったということで解決したということですか? 確かにリンクセルの値を変えることで速度は、速くなりましたが・・・。 >マクロを実行すると、砂時計マークが出てかなり長い間処理をしているようなのですが、 >チェックボックスのある範囲を指定して実行することで、処理は早くなったりするでしょうか? これ、どのくらいのチェックボックスが配置されていて、かなり長い時間とは、具体的にどのくらいですか? '======================================================================== Sub test() Dim g0 As Long For g0 = 1 To 1000 With ActiveSheet.CheckBoxes.Add(100, g0 * 20, 80, 20) .Value = xlOn End With Next End Sub '======================================================================= Sub test1() 'コマンドバー フォームの チェックボックスの場合 Dim chkbox As Object For Each chkbox In ActiveSheet.CheckBoxes chkbox.Value = 0 Next End Sub 上記 testで 1000個のチェックボックスを配置して、test1でチェックをはずした場合、 3秒程度でした。これが長いということですか? 参考に教えてください。 ichinose ---- ichinose様 ありがとうございます。当方vistaを使用しており、下記のマクロを実行したところ毎回30秒程度「応答なし」になり、砂時計マークが続きます。 ____________ Sub test1() 'コマンドバー フォームの チェックボックスの場合 Dim chkbox As Object For Each chkbox In ActiveSheet.CheckBoxes chkbox.Value = 0 Next End Sub _____________ ちなみにチェックボックスは200個程度でエクセルは1つしか立ち上げておらず、もっと複雑なマクロを実行しても、 こんなに時間がかかったことはなかったものですから質問させていただきました。 今回は、みやほりん様のリンクするセルの値を消してチェックボックスをクリアする方法でマクロを作って、運用することと致しました。 ありがとうございました。(お願いします) ---- 解決済みですけど。 リンク設定されていると言うことですが、数式がいっぱいあったりしませんか? リンクしていると、リンク先のセルの内容が変わるから、都度再計算が行われているんじゃぁ ないのかなぁー、と思います。 再計算と手動に変えてみたらどうでしょう。 vistaとかは、あまり関係なさそうな。(触ったことないから良く知らんけど。) 「リンクするセルの値を消して」が1番簡単ですけどね。 (Jaka)