- ベストアンサー
Excelチェックボックス応用方法
Excel初心者で困っております… 表現が分かりにくいと思いますがどなたか教えて頂ければと思います。 ◆各項目ごとにチェックボックスがついている表を作成中です◆ 仮に入口Aの選択肢a1~a10として、a3を選択したとします。 ◆以下が質問です↓ チェックボックスが1つ以上入れば、結果Bの値がAの選択肢(a1~a10)の範囲内でa5になる。 ※チェックボックスが1つも入らなかった場合に流すメッセージも表示出来たら素晴らしいです。 よろしくお願いします!!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あなたのご質問は >チェックボックスが1つ以上入れば、結果Bの値がAの選択肢(a1~a10)の範囲内でa5になる。 です。これに対してフォームのチェックボックスで解決する手段は既に回答済みです。 別のご相談です: >チェックボックスに1つ以上チェックが入ったら結果はリストの値a1~a10のいずれかを返すような形です。 「いずれかを返す」じゃ,いったい何を計算したいのかサッパリ判りません。と各回答者から指摘されているのだと言うことをまず理解してください。 いったい「どうしたいのか」(どういうリクツで何を計算したいのか)は,まずアナタがアタマを整理してヒトに判るようにお話し下さいね。 そもそも別のご質問内容は,今のご相談を「解決」で閉じて新しいご相談投稿でお願いします。 しかも: >a3を選択してa4(数値UP)になるパターンとa3を選択してa2(数値DOWN)パターンがあり、該当するチェック項目によって変化するようなイメージです 「イメージ」ってナンですか。何をしたいのか回答者が勝手にイメージして,(あなたのヤリタイ事と違うことを)回答しても良いって事ですね。 次の通り作成します:添付図参照 A1:A10がリストの元ネタで,これを元にB2セルでリストから選択します チェックボックスはupとdownの2つを用意しています 結果をD2セルに表示しますが,一体何をしたいのかというと 1.B2でまだ何も選んでいないときは,何も表示したくない 2.B2で何か選んだ場合 a) upがチェックされていたときは,B2の次を表示する ただし「a10」が選択されていた場合は「次」が無いので,a10を表示させる b) downがチェックされていた時は,B2の一つ前を表示する ただし「a1」が選択されていた場合は「前」が無いので,a1を表示させる c) upもdownもチェックされていなかったときは,B2を表示する d) upもdownも両方チェックされていたときは,upを優先して次を表示する upのチェックボックスのリンクするセルはC1 downのチェックボックスのリンクするセルはC3 としておく D2: =IF(B2="","",IF(C1,INDEX(A1:A10,MIN(10,MATCH(B2,A1:A10,0)+1)),IF(C3,INDEX(A1:A10,MAX(1,MATCH(B2,A1:A10,0)-1)),B2))) 等のように数式を記入する #回答を参考に,「何をどこにどのように用意してあって」「それぞれがどうだったらどうしたい」のか,もう一度全ての場合についてキチンと漏れなく整理し,ご自分でも作成してみてください。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
これはVBAの質問か。初めに明記のこと。 >表現が分かりにくいと 表現のこともあるが、勉強不足もあって、必要なことが書けないんだ。 甘えないで、よく文章を推敲すること。 それとチェックボックスを (1)ワークシートに貼り付ける場合 (2)ユーザーフォームに貼り付ける場合 があるが、どちらか書いてない。vVBAでは違いがある。 >チェックボックスがついている表を作成中です ということでは、シートにチェックボックスを載せているのかな。 ーー するとシートのチェックボックスの状態をソフト側がとらえるタイミング(キッカケ)を捉え(教え)ないといけない。 普通はコマンドボタンを貼り付け、クリックイベントでとらえるのだがそんなことも書かれていない。 ーーー >結果Bの値がAの選択肢(a1~a10)の範囲内でa5になる 結果BのBとは何か? >a5になる 意味不明。 a5セルの値として、何かをセット刷るのか。 チェックボックスの値は、TRUE、FALSEになるようだが、どう考えているのか。 プロパティのLinkedCellなんて知っていて使っているのか。 ーーー Sub test07() For i = 1 To 10 If Left(Worksheets("Sheet1").DrawingObjects(i).Name, 8) = "CheckBox" Then If Worksheets("Sheet1").DrawingObjects(i).Object.Value Then myCnt = myCnt + 1 End If End If Next 'MsgBox myCnt If myCnt = 0 Then MsgBox "チェックがありません" Else MsgBox myCnt & " 件チェックがあります" End If End Sub このコードは普通こうするものか自信が無い。ワークシートの上のコントロールについては、私としてはWEBなどでも情報不足と思うし、VBAではすっきりしないようになっていると個人的に思うので苦労する。
補足
勉強不足、ご指摘の通りです。。 Excelシート上でフォームのチェックボックスを作成し、現在リンクでTRUE、FALSEを返しています。 VBAではなく数式で解決したいです。 リストの入力規則の値(a1~a10)を参照して、チェックボックスとも組み合わせて結果Bを表示させたいです。 あるチェックボックスが選択されたら動的に結果B(同シート内セル)の値がリストから参照されて表示される…というイメージなのですが、、a5は例なのでa1~a10のいずれかになるかはチェックボックス次第です。
- keithin
- ベストアンサー率66% (5278/7941)
説明が足りていないのは,概ね次のような部分です。これら一つ一つについて丁寧に解決していけば,特に難しくなく実現できます。 ●エクセルでは「フォーム」のチェックボックスと「コントロールツールボックス(ActiveXコントロール)」のチェックボックスと,2種類のチェックボックスを利用できます。 あなたはどちらを使って,どのようにご質問のモノを作成したいのですか? ●またワークシート上にそういうモノを作りたいのか,それともマクロをバリバリ使ってユーザーフォームを作成しているのですか? ●また「結果B」とは具体的に何ですか? ワークシートのどこかのセルで良いのか 何かテキストボックスのようなモノをシート上,あるいはユーザーフォーム上に配置したいのか など,出来ることが多すぎてアナタが何をしたいのか絞り込めません。 ●なぜ「a5」なのですか。チェックが一つでも入れば「a5」と『無条件に』出せれば良いのでしょうか。まぁこの点は具体的な単にバリエーションなので,後でご自分でまた考えて貰えば良いことですが。 ●さらにチェックボックスが「まだ」一つも入っていないと,いつ,どんなタイミングで,誰が何をしたら検知してメッセージを出したいのですか。 ●そもそもエクセルのバージョンは幾つを使っているのですか。ご利用のソフトのバージョンに応じて,出来ること出来ないこと具体的な段取りが変わる場合が多くありますので,ご相談投稿では必ずバージョンまで明記することを憶えてください。 作成例: 「フォーム」のチェックボックスを「ワークシート上に」必要数,配置します それぞれのチェックボックスを右クリックしてコントロールの書式設定を出し,リンクするセルを設定します仮にA1からA10セルに。 「結果B」を仮にB1セルに表示します B1セルには =IF(COUNTIF(A1:A10,TRUE()),"a5","") と記入しておきます。 以上で,あなたの「ヤリタイ事」は概ね実現しました。
補足
色々と分かりにくくてすみません。順不同で恐縮ですが補足致します。 ◆Excel2007です。 ◆結果Bはワークシート上で良いです。 ◆フォームのチェックボックスです。 ◆マクロは使わずに数式でどうにかしたいです。 ◆a1~a10までは入力規則のリストで選択します。 ◆結果Bはリストで選んだ値とチェックボックスによって動的に変化させたいです。 改めて整理致しますが、リストでa3を選択して、チェックボックスに1つ以上チェックが入ったら結果はリストの値a1~a10のいずれかを返すような形です。 a3を選択してa4(数値UP)になるパターンとa3を選択してa2(数値DOWN)パターンがあり、該当するチェック項目によって変化するようなイメージです…色々と書きましたが伝わりましたでしょうか。。 ※当初の質問では結果欄にa5を表示とのことでしたが、a5を表示する場合はリストでa4かa6を選んだ場合になります。
お礼
画像まで添付して頂き、ありがとうございました。 回答を参考にしながら再度自分で試行してみます。 また質問文についても考え直します。確かに意味が分からないですね… 『自分がどうしたいのか』ということを明確にします。