dポイントプレゼントキャンペーン実施中!

こんにちは、エクセル2010を使っています。

現在、ボタンに以下の様なコードでチェックボックスを ON にしています。

コードは以下の様な物です。

Sub ボタン25_Click()
Dim i%
For i = 1 To 24
ActiveSheet.CheckBoxes(i) = xlOn
End Sub

またOFFボタンを別に設けているのですが、これをひとつのボタンで ON OFF したいと思います。

もう一度押したらOFFになる様にしたいのです。

詳しい方、教えて頂けませんでしょうか。

よろしくお願いいたします。

質問者からの補足コメント

  • 回答ありがとうございます。

    if文ってあるのですね、提示いただいた方法ではやりたいことに近いのですが、チェックが全てONとかすべてOFFとかなら目的通りになるのですが、所々にチェックが入っている場合、反転してしまいます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/02/13 19:16
  • 再度の回答ありがとうございます。

    予測して教えて頂いてたのですね、私の方こそ知識がなくて教えて頂き大変感謝しております、ありがとうございます。


    それで内容ですが、これです、やりたかったのはこれなんです。

    大変助かりましたが、こんどはフィールド上の全てのチェックボックスが一気にON OFFしちゃいます。

    これを1から3ボックスのみに適合させるにはどうしたら良いでしょうか?

    お手数を頂き恐縮ですが、今一度教えて頂けませんでしょうか。

    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/02/13 22:58
  • 回答ありがとうございます。

    これでは、ついているチェックは消えるようですが、消えているチェックがONになりません><

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/02/15 04:07
  • 再回答頂き、ありがとうございます。

    確認の為、コードを再コピペして検証してみました。

    ブレークポイント設定、実行ボタン押下後、F8で進めていくと、ローカルウィンドウに変化が出るのは、【 if flg Then 】 の時です。

    その時は値は以下の様になっています。
    i 1
    n "ON/OFF"
    LASTNUM 3
    btn 空白
    flg false

    その後、F8を押していくと、【 if flg Then 】の時に iの値が一つずつ増えていくだけで、他の値の変化はありません。

    続けて押していくと、【 if flg Then 】の値が4になった時、最終行である、End Subまで行って、ローカルウィンドウ全体が空白になり終了? する模様です。

    これで正常でしょうか?

    ちなみにコードはコピペ

    Sub ボタン37_Click()

    End Sub

    の間です。

    No.4の回答に寄せられた補足コメントです。 補足日時:2015/02/21 03:08

A 回答 (4件)

こんにちは。



>ついているチェックは消えるようですが、消えているチェックがONになりません><
今、アップロードしたコードで試してみましたが、そのような不具合は発見できません。

そこで、デバッグの方法を教えますから、ご自身で試してみてください。
ご存知だとしても、もう一度、私の方法をみてください。
その結果をみて考えてみます。

画像は、不鮮明でしょうから、言葉でも説明します。

*************
1.最初にブレークポイントを2箇所設定してください。
  If InStr(1, "ON", n, 1) > 0 Or Trim(n) = "" Then '文字を消されても復活

  For i = 1 To LASTNUM

マウスポインターを置きクリックし、F9を押しますと、標準ではブラウンの帯が付きます。
なお、消す時は、同じく、マウスポインターを置きクリツクし、F9を押すと消えます。

2. ワークシート上のボタンを押します。

そうすると、ブレークポイント上で、コードが止まります。

3.その後は、F8で、一行ずつ進めていきます。
そうすると、flg が決まるはずです。
ボタンのキャプションは文字が変わり、やがて、ループに入っていきます。

4.ローカルウィンドウをみると、

[n   "OFF"]
[flg    True]

ということになっているはずです。

それで最後までいくと、チェックボックスは、チェックがついていきます。
図は、その最中で、
[i   1]
となって、オンになってくのが分かるはずです。
*************

ここまでは分かりましたでしょうか。
なお、ブレークポイントは、残しておいてもしょうがないので、Ctrl + Shift -> F9 で、置かれているすべてのブレークポイントが消えます。

いくら、私が調子を落としていても、本質的な部分で、そんなに問題やミスをするとは思えませんし、
また、こちらの不具合がみつかりませんので、このような方法で、調べていただくしかありません。
何か不具合があれば、ブレークポイントや、その後のステップインで、ローカルウィンドウでも
確認が取れます。

画像は、ONになる瞬間の場面です。
「エクセル ボタンによるチェックボックスの」の回答画像4
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ちょっと検証してみます、今しばらくお待ちいただけませんでしょうか。

よろしくお願いいたします。

お礼日時:2015/02/17 21:17

こんにちは。



>それで内容ですが、これです、やりたかったのはこれなんです。
それはよかったです。私は、いろんなことを考えすぎて、昨日から、生活全般・何か思惑とは、全部、反対になるのです。また、違っているかもしれません。少々、落ち込み気味です。(^^;

>1から3ボックスのみに適合させるにはどうしたら良いでしょうか?
結局、最初に戻ってしまいました。

'//
Sub ボタン25_Click()
 Dim i As Integer
 Dim n As String
 Dim btn As Object
 Dim flg As Boolean
'*****************
 Const LASTNUM As Long = 3 '設定
'*****************
 With ActiveSheet
  Set btn = .Buttons(Application.Caller)
  n = btn.Caption
  If InStr(1, "ON", n, 1) > 0 Or Trim(n) = "" Then '文字を消されても復活
   flg = False
   btn.Caption = "OFF"
   btn.Font.ColorIndex = 3 '不要なら削除(フォントの色を返る-赤)
  ElseIf InStr(1, "OFF", n, 1) > 0 Then
   flg = True
   btn.Caption = "ON"
   btn.Font.ColorIndex = 5 '不要なら削除(フォントの色を返る-青)
  End If
  For i = 1 To LASTNUM
   If flg Then
    .CheckBoxes(i) = xlOn
   Else
    .CheckBoxes(i) = xlOff
   End If
  Next i
 End With
End Sub
'//
この回答への補足あり
    • good
    • 0

こんばんは。



>チェックが全てONとかすべてOFFとかなら目的通りになるのですが、所々にチェックが入っている場合、反転してしまいます。

とういうことは、すべてがON または、すべてがOFFになることを指すのですか?

「フォームコントロールは、オブジェクト・コレクションだから、個々に別れても、全体を一つにまとめられるからです。個別のプロパティがあるのに、まとめたところで、意味はないかもしれませんが。」
内容的にちょっと難しい言い方でしたから、分からなかったと思いますが、私が却下したほうだったのですね。なお、これは、フォームコントロールだけの特長です。

なぜ、却下したかというと、一方的に決めてしまうことになるので、最初はそれを辞めました。
以下は、本来、セル上に、オン・オフを残せればよいのですが、必ずしもそういう環境にない場合は、
自分のボタンの表面に表示してしまうことです。その分だけ複雑になりました。本当に必要な部分は、*のついているところだけです。

'//
Sub ボタン25_Click()
 Dim i As Integer
 Dim n As String
 Dim btn As Object
 With ActiveSheet
  Set btn = .Buttons(Application.Caller)
  n = btn.Caption
  If InStr(1, "ON", n, 1) > 0 Then
   .CheckBoxes = xlOff '*
   btn.Caption = "OFF"
  Else
   .CheckBoxes = xlOn
   btn.Caption = "ON" '*
  End If
 End With
End Sub
'//
この回答への補足あり
    • good
    • 1

xlOff/xlOn には、反転が利かないので、このようなIf構文にしなくてはならないはずです。


以下の場合は、各々のチェックボックスが、ON はOFF に、OFF はON に変わります。
なお、他にも方法があるかもしれません。なぜなら、フォームコントロールは、オブジェクト・コレクションだから、個々に別れても、全体を一つにまとめられるからです。個別のプロパティがあるのに、まとめたところで、意味はないかもしれませんが。

'//
Sub ボタン25_Click()
 Dim i As Integer '←今は、型宣言文字%は使わないような傾向です。
 With ActiveSheet
  For i = 1 To 24
   If .CheckBoxes(i) = xlOn Then
    .CheckBoxes(i) = xlOff
   Else
    .CheckBoxes(i) = xlOn
   End If
  Next i
 End With
End Sub
'//
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!