• ベストアンサー

EXCELのチェックボックスについて

EXCEL2003を使用しています。 ■質問項目があり、回答する複数のセルにチェックボックスを配置してあります。 A列:質問 B列:回答のチェックボックス C列:回答のチェックボックス D列:回答のチェックボックス : Z列:OK 又は NGと表記したい。 ■各列の回答チェックボックスが全てonになっていたらOK、1つでもoffになっていたらNGと、Z列に表記させたいのですが、どのような式になりますか? ご回答の程、よろしくお願いいたします。

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

  • ベストアンサー
  • banshibo
  • ベストアンサー率53% (7/13)
回答No.1

チェックボックスの "リンクするセル" を利用するのが手早いと思います。 印刷範囲外に true とか false を出力するようにして、そこをあとで集計するとして、その結果をZ列に返しては如何でしょうか? たとえば、B2のチェックボックスのリンク先を、ずっと右のほうの、AB2というセルにリンクさせます。 そうすると、B2のチェックボックスのチェックしたかどうかが、 true もしくは false で、AB2のセルに表示されます。 これを、C2のチェックボックスをAC2にリンク、 D2のチェックボックスをAD2にリンク。。。という具合に Y2をAY2にリンクというところまで続けていきます。 次に、AZ2のところに、↓を書き込みます。 =countif(AB2:AY2,"TRUE") すると、AZ2のところに数字が出ます。 あとは、Z2のところに =if(AZ2=24,"OK","NG") と入力してあげれば、思ったとおりに出来るはずです。 3行目以降は、2行目を丸ごとコピーすれば使えます。 チェックボックスとリンクの仕方は下記サイトを参考にしてください。

参考URL:
http://kokoro.kir.jp/excel/checkbox.html
nene99
質問者

お礼

お礼が遅くなり、申し訳ありません。 この方法でバッチリでした!! 助かりました。どうもありがとうございます。 また何かありましたら、どうぞよろしくお願いいたします。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

私も思いついたのは#1のご回答の方法でした。既出だったので出せませんが。 ーー LinkedCellを使わないでやるには VBAでTRUEの数を数えると良いわけですが チェックボックスだけなら Sub test01() t = 0 For i = 1 To 3 MsgBox Worksheets("Sheet1").OLEObjects(i).Object.Value If Worksheets("Sheet1").OLEObjects(i).Object.Value = True Then t = t + 1 End If Next i MsgBox t End Sub MsgBoxは適当なときに削除してください。 上記tの値が既定の数に等しいかどうかでZ列にOK,NGを入れてください。これらは全行一斉に対象に実行するか、クリックイベントなどで実行してください。

nene99
質問者

お礼

お礼が遅くなり、申し訳ありません。 #2の方と同様に、マクロはよくわからないので、#1の方の方法で対応いたしました。 でも、今後はマクロも勉強していきたいと思っていますので、また何かありましたら、どうぞよろしくお願いいたします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 以下は、フォーム側のチェックボックスに設定するためのマクロです。 ただし、全体のチェックボックスで、個別に分けてはいません。 コントロールツールのチェックボックスでは、かなりコードの内容が変わります。 '標準モジュールのみです。 '------------------------------------------------ Sub ChkBxCheck() 'チェックボックス表示用   Dim chk As Object   For Each chk In ActiveSheet.CheckBoxes     If chk.Value = xlOff Then       Range("Z2").Value = "NG"       Exit Sub     End If   Next chk   Range("Z2").Value = "OK" End Sub '------------------------------------------------ Sub ChkBoxSet() 'チェックボックスに設定 '1回きりで設定されます。   Dim chk As Object   For Each chk In ActiveSheet.CheckBoxes     chk.OnAction = "ChkBxCheck"   Next chk End Sub

nene99
質問者

お礼

お礼が遅くなり、申し訳ありません。 マクロはよくわからないので、#1の方の方法で対応いたしました。 でも、今後はマクロも勉強していきたいと思っていますので、また何かありましたら、どうぞよろしくお願いいたします。

関連するQ&A

専門家に質問してみよう