Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6539 / 13646 ツリー ←次へ | 前へ→

【44669】チェックボックスのオンオフの件。 kouka 06/11/28(火) 15:26 質問[未読]
【44672】Re:チェックボックスのオンオフの件。 りん 06/11/28(火) 15:45 回答[未読]
【44675】Re:チェックボックスのオンオフの件。 kouka 06/11/28(火) 17:53 質問[未読]
【44678】Re:チェックボックスのオンオフの件。 りん 06/11/28(火) 18:15 発言[未読]
【44680】Re:チェックボックスのオンオフの件。 kouka 06/11/28(火) 18:38 お礼[未読]
【44674】Re:チェックボックスのオンオフの件。 Kein 06/11/28(火) 15:59 回答[未読]
【44676】Re:チェックボックスのオンオフの件。 kouka 06/11/28(火) 18:03 質問[未読]
【44677】Re:チェックボックスのオンオフの件。 kouka 06/11/28(火) 18:09 お礼[未読]
【44679】Re:チェックボックスのオンオフの件。 Kein 06/11/28(火) 18:20 発言[未読]
【44681】Re:チェックボックスのオンオフの件。 kouka 06/11/28(火) 18:42 お礼[未読]

【44669】チェックボックスのオンオフの件。
質問  kouka  - 06/11/28(火) 15:26 -

引用なし
パスワード
   お世話になります。
koukaです。

シート上にフォームのチェックボックスをいくつか配置して、
そのチェックボックスがオンの状態なのか、
オフの状態なのかを取得するにはどういう記述をすればいいですか?
チェックボックス自体のオンオフは・・・
  ActiveSheet.Shapes("チェック 1").Select
  With Selection
    .Value = xlOff または xlOn
  End With
で、出来たのですが、
これを判定する為に例えば、IF文に組み込む記述がわかりません。
すみませんが、教えてください。
よろしくお願いします。

【44672】Re:チェックボックスのオンオフの件。
回答  りん E-MAIL  - 06/11/28(火) 15:45 -

引用なし
パスワード
   kouka さん、こんにちわ。

>シート上にフォームのチェックボックスをいくつか配置して、
>そのチェックボックスがオンの状態なのか、
>オフの状態なのかを取得するにはどういう記述をすればいいですか?
シート上のフォームコントロールのチェックボックスのチェック状況を判断します。
Sub test()
  Dim sh As Shape, sh2 As ControlFormat
  For Each sh In ActiveSheet.Shapes
   If sh.Type = msoFormControl Then
     If sh.FormControlType = xlCheckBox Then
      Select Case sh.ControlFormat.Value
        Case 1:   Msg = "チェックあり" 'TRUE
        Case -4146: Msg = "チェックなし" 'FALSE
        Case Else: Msg = "淡色表示  " '#N/A(淡色)
      End Select
      MsgBox Msg, vbInformation, sh.Name
     End If
   End If
  Next
End Sub

こんな感じです。

【44674】Re:チェックボックスのオンオフの件。
回答  Kein  - 06/11/28(火) 15:59 -

引用なし
パスワード
   どのようなタイミングで判定したいのでしょーか ?
任意のタイミングで、配置している全てのチェックボックスの状態を判定
したいなら・・

Sub CheckB_Ck()
  Dim CkB As CheckBox
 
  For Each CkB In ActiveSheet.CheckBoxes
   If CkB.Value = xlOn Then
     MsgBox CkB.Name & " はチェックが付いています", 64
   End If
  Next
End Sub

一つのチェックボックスを弄ったとき、チェックが付いたか外れたかを
判定したいなら・・
まず配置したシートを開いて↓を一回実行して、全てのチェックボックスに
マクロを割り当てます。

Sub マクロ割り当て()
  ActiveSheet.CheckBoxes.OnAction = "Get_Ck"
End Sub

↓呼び出し専用となるので、単独での実行は出来ないようにしています。

Sub Get_Ck()
  Dim x As Variant
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  With ActiveSheet.CheckBoxes(x)
   If .Value = xlOn Then
     MsgBox .Name & " はチェックされました!", 64
   Else
     MsgBox .Name & " はチェックを外しました!", 48
   End If
  End With
End Sub

【44675】Re:チェックボックスのオンオフの件。
質問  kouka  - 06/11/28(火) 17:53 -

引用なし
パスワード
   こんばんわ、りんさん。

頭が爆発してしまいそうですが、私なりに考えてみました。
>Sub test()
>  Dim sh As Shape, sh2 As ControlFormat
>  For Each sh In ActiveSheet.Shapes
       ↑図形を格納
>   If sh.Type = msoFormControl Then
       ↑格納した図形はチェックボックスかどうか判定
>     If sh.FormControlType = xlCheckBox Then
       ↑チェックボックスの中身を判定?
>      Select Case sh.ControlFormat.Value
>        Case 1:   Msg = "チェックあり" 'TRUE
       ↑オンの時は『1』を返しますよね?
>        Case -4146: Msg = "チェックなし" 'FALSE
       ↑??
>        Case Else: Msg = "淡色表示  " '#N/A(淡色)
>      End Select
>      MsgBox Msg, vbInformation, sh.Name
>     End If
>   End If
>  Next
>End Sub
と、いうように見てみましたが、やっぱり間違ってます?(汗)

オフの時の記述ですが、『-4146』になってますよね?
これってVBAの決まり事なのですか?
てっきりオフのときは『0』かと思ってましたが。。。
あと変数『sh2』はどこで使っているのでしょう?
すみませんが、教えてください。
よろしくお願いします。

【44676】Re:チェックボックスのオンオフの件。
質問  kouka  - 06/11/28(火) 18:03 -

引用なし
パスワード
   こんばんわ、Keinさん。

>どのようなタイミングで判定したいのでしょーか ?
一応、報告書みたいにチェックをして登録ボタンを押すと、
そのチェックの紐付き内容を、別のシートに件数カウントしようと思ってます。

そこでよくわからないのですけど・・・
>Sub CheckB_Ck()
>  Dim CkB As CheckBox
> 
>  For Each CkB In ActiveSheet.CheckBoxes
>   If CkB.Value = xlOn Then
>     MsgBox CkB.Name & " はチェックが付いています", 64
                この数字って何ですか??↑
>   End If
>  Next
>End Sub
すみません、案2.として提示していただいたVBAはまだ試してないのですけど、
>     MsgBox .Name & " はチェックを外しました!", 48
やっぱり、最後の数字がついているので・・・。

そこ以外は、やりたい事が出来そうです。
ありがとうございます!

【44677】Re:チェックボックスのオンオフの件。
お礼  kouka  - 06/11/28(火) 18:09 -

引用なし
パスワード
   わー、すみません!

意味わかりました!!
>>     MsgBox CkB.Name & " はチェックが付いています", 64
>                この数字って何ですか??↑
>>     MsgBox .Name & " はチェックを外しました!", 48
64は『情報メッセージアイコン』で、
48は『注意メッセージアイコン』ですね!
失礼しました。

【44678】Re:チェックボックスのオンオフの件。
発言  りん E-MAIL  - 06/11/28(火) 18:15 -

引用なし
パスワード
   kouka さん、こんばんわ。
>
>頭が爆発してしまいそうですが、私なりに考えてみました。
>>Sub test()
>>  Dim sh As Shape, sh2 As ControlFormat
>>  For Each sh In ActiveSheet.Shapes
>       ↑図形を格納(ループ)
>>   If sh.Type = msoFormControl Then
>       ↑格納した図形はチェックボックスかどうか判定(フォームのアイテムかどうかを確認、四角形、直線、写真等を無視)
>>     If sh.FormControlType = xlCheckBox Then
>       ↑チェックボックスの中身を判定?(そのアイテムがチェックボックスかどうかを確認)
>>      Select Case sh.ControlFormat.Value
>>        Case 1:   Msg = "チェックあり" 'TRUE
>       ↑オンの時は『1』を返しますよね?
>>        Case -4146: Msg = "チェックなし" 'FALSE
>       ↑??
>>        Case Else: Msg = "淡色表示  " '#N/A(淡色)
>>      End Select
>>      MsgBox Msg, vbInformation, sh.Name
>>     End If
>>   End If
>>  Next
>>End Sub
>と、いうように見てみましたが、やっぱり間違ってます?(汗)
>
>オフの時の記述ですが、『-4146』になってますよね?

>>Sub test()
>>  Dim sh As Shape, sh2 As ControlFormat
>>  For Each sh In ActiveSheet.Shapes
>>   If sh.Type = msoFormControl Then
>>     If sh.FormControlType = xlCheckBox Then
       MsgBox sh.ControlFormat.Value, vbInformation, sh.Name & ".Value"
>>     End If
>>   End If
>>  Next
>>End Sub
これで表示して内容を確認しました。

>オフの時の記述ですが、『-4146』になってますよね?
>これってVBAの決まり事なのですか?
決まりごとかどうかはわかりませんが、チェックして値をメッセージで出したらそうなったので。
>てっきりオフのときは『0』かと思ってましたが。。。
私もそう思ってました。
検索したら、ここの過去ログがヒットしました。
h t t p://www.vbalab.net/vbaqa/data/excel/log/tree_520.htm#2640
私のと似たようなコードでした。

>あと変数『sh2』はどこで使っているのでしょう?
すみません、使っていません。
メンバリストを確認するのに宣言したのですが、使わなかったのに消すのを忘れていました。ややこしくしてごめんなさい。

あと、向こうの枝でみましたがボタンのイベントで転記するならば、チェックボックスにリンクセルを設定してそのセルの内容で分岐するようにしたほうが、チェックボックスでループするよりも管理しやすいと思います。

【44679】Re:チェックボックスのオンオフの件。
発言  Kein  - 06/11/28(火) 18:20 -

引用なし
パスワード
   MsgBox関数の第2引数は、アイコンとボタンの種類を指定します。
文字定数か値のどちらかで指定できるので、私はいつも値の方を使います。
48 と 64 は、ヘルプによると

定数      値  
vbExclamation  48  注意メッセージ アイコンを表示します
vbInformation  64  情報メッセージ アイコンを表示します

と、なっています。値による指定をする理由は、希望するボタンと組み合わせた
表示をしたいとき、単純に定めれた値を足し算すれば良いからです。
例) 問い合わせアイコンと「はい」「いいえ」ボタンを表示したいとき

vbYesNo        4  [はい] ボタンと [いいえ] ボタンを表示します
vbQuestion   32  問い合わせメッセージ アイコンを表示します

vbYesNo + vbQuestion と書くところを 36 とする。

【44680】Re:チェックボックスのオンオフの件。
お礼  kouka  - 06/11/28(火) 18:38 -

引用なし
パスワード
   こんばんわ、りんさん。
お世話になります。

>あと、向こうの枝でみましたがボタンのイベントで転記するならば、チェックボックスにリンクセルを設定してそのセルの内容で分岐するようにしたほうが、チェックボックスでループするよりも管理しやすいと思います。
実はそうしようと思ってます。
ボタンを押したとき、件数カウントした後に、
チェックボックスのクリアをしたくて、オンオフの判定が知りたかったのです。

この度もありがとうございました。

【44681】Re:チェックボックスのオンオフの件。
お礼  kouka  - 06/11/28(火) 18:42 -

引用なし
パスワード
   こんばんわ、Keinさん。

>例) 問い合わせアイコンと「はい」「いいえ」ボタンを表示したいとき
>
>vbYesNo        4  [はい] ボタンと [いいえ] ボタンを表示します
>vbQuestion   32  問い合わせメッセージ アイコンを表示します
>
>vbYesNo + vbQuestion と書くところを 36 とする。
↑そうなのですか!?
初めて知りました。。。
便利ですね。
今度使ってみます。
ありがとうございました。

6539 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free