『複数のチェックボックスで、いくつチェックしても同じ数字を返したい』(SAH後) はじめまして、うまくいかずに困っています。 チェックボックスを使って下記のように表を作ってチェックしたチェックボックスに リンクした数字の合計をC10に送り合計値を出すようにしていますが上手くいきません。 (C列のチェックボックスにはDの列のセルとリンクさせています。例えばC4チェックボックスは$D$4とリンクさせています。)    A  B C  D 1  文章     数字  チェックボックス  (片方のみ表示) 2 ○○○○   │ 2 │    □   │   TRUE/FALSE ──────────────────────────────── 3 ○○○○   │ 2 │    □   │ TRUE/FALSE ──────────────────────────────── 4 ○○○○   │   │    □  │ TRUE/FALSE ────────┤   ├─────────────────── 5 ○○○○   │ 4 │    □  │ TRUE/FALSE ────────┤   ├─────────────────── 6 ○○○○   │   │    □  │ TRUE/FALSE ──────────────────────────────── 7 ○○○○   │ 1 │    □ │ TRUE/FALSE ──────────────────────────────── 8 ○○○○   │ 2 │    □  │ TRUE/FALSE ────────┤ ├─────────────────── 9 ○○○○   │   │    □  │ TRUE/FALSE ──────────────────────────────── 10 チェックの入った数字の合計数 △(便宜上C10セル) C10のセルに=SUMIF($D$2:$D$9,TRUE,$B$2:$B$9)という数式が入っています。 この時に4〜6行のチェックボックスはどこか1つでも、4つ全てチェック入れても「4」という数字をC10セルに送り 8〜9行のチェックボックスも同様にどこか1つでも、2つ全てチェック入れても「2」という数字をC10に送りたいです。 単独の所は問題なく行えています。 ところが、実際に使ってみるとC4やC8などの先頭のチェックボックスにチェックをいれるとC10に「4」や「2」という数字を送るのですが C5やC6、C9だけにチェックボックスにチェックを入れてもC10は、「0」になってしまいます。 C5やC6、C9にチェックを入れても数字が送られるようにするにはどのようにしたらいいのでしょうか? 尚、B4やB8セルは結合されており、分割して通常の状態では使用しない前提です。 つたない説明で申し訳ありません。 不明な点も多数あるかと思いますが 皆さんのお知恵を拝借出来れば幸いです。 < 使用 Excel:unknown、使用 OS:Windows7 > ---- =SUMPRODUCT($D$2:$D$3*$B$2:$B$3)+OR($D$4:$D$6)*$B$4+$D$7*B7+OR($D$8:$D$9)*$B$8 ではどうか? (ねむねむ) 2018/10/19(金) 09:14 ---- 汎用的にユーザー定義関数を作成してみました。 標準モジュールに下記貼り付け後、セルC10に=SUMIFEx($D$2:$D$9,TRUE,$B$2:$B$9) としてみてください。 (取り急ぎで細かくは見きれてませんしエラー処理もできてません。すみません。) Function SUMIFEx(Arg1 As Range, Arg2, Arg3 As Range) As Double Application.Volatile Dim Rng As Range Dim n As Long Dim Flg As Boolean n = 0 For Each Rng In Arg1 n = n + 1 If Rng.Value = Arg2 Then If Arg3.Cells(n).MergeCells = False Then Flg = False If Flg = False Then SumifEx = Application.Sum(tmp, Arg3.Cells(n).MergeArea.Item(1)) If Arg3.Cells(n).MergeCells Then Flg = True Else Flg = False End If Next Rng End Function (ろっくん) 2018/10/19(金) 09:24 ---- ろっくんさん、tmpが定義されていないとエラーが出たが。 (ねむねむ) 2018/10/19(金) 09:36 ---- tmpをSumifExにして試してみたが、D4セルからD6セルのいくつかがTRUEでD7セルがFALSEの場合、D8:D9セルがTRUEでも反映されないようだ。 (D7セルがTRUE、あるいはD4セルからD6セルがFALSEの場合はD8:D9セルがTRUEで反映される) (ねむねむ) 2018/10/19(金) 11:49 ---- あ、ほんとですね。 失礼しました。 修正してみましたのでこちらでいかがでしょうか。 ねむねむさん、ご指摘ありがとうございます。。 Function SUMIFEx(Arg1 As Range, Arg2, Arg3 As Range) As Double Application.Volatile Dim Rng As Range Dim n As Long Dim Flg As Boolean Dim tmp As Long n = 0 For Each Rng In Arg1 n = n + 1 If Rng.Value = Arg2 Then Flg = False If Flg = False Then tmp = Application.Sum(tmp, Arg3.Cells(n).MergeArea.Item(1)) If Arg3.Cells(n).MergeCells Then Flg = True Else Flg = False End If Next Rng SUMIFEx = tmp End Function (ろっくん) 2018/10/19(金) 12:00 ---- あ、これも条件満たしてないでダメですね。 ちょっと考えます。 (ろっくん) 2018/10/19(金) 12:01 ---- 度々すみません。 修正してみました。 Function SUMIFEx(Arg1 As Range, Arg2, Arg3 As Range) As Double Application.Volatile Dim Rng As Range Dim n As Long Dim Flg As Boolean Dim tmp As Long Dim mArea As String n = 0 For Each Rng In Arg1 n = n + 1 If Rng.Value = Arg2 Then If Arg3.Cells(n).MergeCells And mArea = Arg3.Cells(n).MergeArea.Address Then Flg = True Else Flg = False mArea = Arg3.Cells(n).MergeArea.Address If Flg = False Then tmp = Application.Sum(tmp, Arg3.Cells(n).MergeArea.Item(1)) End If Next Rng SUMIFEx = tmp End Function (ろっくん) 2018/10/19(金) 12:40 ---- いろいろと、ありとうございます ねむねむさん、ろっくんさん、お付き合いいただきありがとうございます! すごく助かりました。 帰ったらさっそく試してみます。 ろっくんさん、このご教授頂いたユーザー定義関数?は 仮に行が10、11、12と増えたり、他に反応しないチェックボックスが増えて4つになったり、 不定期に並んだりしたときも このまま、使えるものなのでしょうか? (SHA後) 2018/10/19(金) 14:04 ---- 汎用的にしてありますので行数を変更しても、 他に反応しないチェックボックスが増えても、 同じように使えますよ。(はず。) (ろっくん) 2018/10/19(金) 14:12 ---- お返事遅くなりました。 やってみたところ、うまくいきました。 ありがとうございます! 実は仕様?が変わって下記のように行や列が増えて下図のような状態になったら C45の合計値が出るところに「#Value!」と出てしまってどうやっても解決できません。 ちなみにF列とG列の間の所でページ(印刷範囲)が切り替わっています。 再度お知恵を拝借出来れば幸いです。    A        B    C     D     E     F        G        H      I       J 1  文章     数字  checkbox checkbox checkbox checkbox (片方のみ表示) (片方のみ表示)(片方のみ表示)(片方のみ表示) 2 ○○○○   │ 2 │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────────────────────────────────────────────────────────────────── 3 ○○○○   │ 2 │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────────────────────────────────────────────────────────────────── 4 ○○○○   │   │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────┤   ├───────────────────────────────────────────────────────── 5 ○○○○   │ 4 │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────┤   ├───────────────────────────────────────────────────────── 6 ○○○○   │   │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────────────────────────────────────────────────────────────────── 7 ○○○○   │ 1 │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────────────────────────────────────────────────────────────────── 8 ○○○○   │   │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────┤ 2 ├───────────────────────────────────────────────────────── 9 ○○○○   │   │  □   │   □   │  □   │   □  │   TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE │ TRUE/FALSE ────────────────────────────────────────────────────────────────────── (ずっと同様に下まで続いて44行まで続きます) 45 チェックの入った数字の合計数 △(便宜上C45セル)同様にC46、C47、C48にもD列、E列、F列の合計が入るようになります。 自宅でテストすると大丈夫なのですが 職場で1から作って同様にすると 最初に述べたように「#Value!」と出てしまってどうにもなりません。 自宅で作成したものを職場のPCに何かの手段を使って入れることは厳禁なので 1から作り直しています。 教えていただいたユーザー定義関数の入力が間違っていないことは何度も確認しました。 他に何か自分の作成上のミスがあるのかもしれませんが もし気付いた点などあれば、ご教授ください。 (SAH後) 2018/10/21(日) 08:40 ---- 念のため、自宅と会社のEXCELとWindowsのバージョンを書いてくれないか? あと会社でEXCELのワークシートに入力した数式をコピーして掲示板に貼り付けてみてくれ。 あと、質問とは関係ないが表などを書き込むときには行頭に半角スペースを1文字入れると 見やすく、また記入した通りに表示される。 (ねむねむ) 2018/10/22(月) 09:38 ---- ねむねむさん、お返事遅くなりました。 何故か職場で確認したところ、今日は何も弄っていないのに 希望通りの動きをしていまして、自分でも???という感じです。 でも何はともあれ、ちゃんと動いてくれたので、ありがとうございました。 また掲示板の入力のアドバイスもありがとうございます。 バージョンは会社が2013で自宅が2010でした。OSは共にWindows7です 合計値を求めたいセルに入力されているのは =SUMIFEx($I$5:$I$44,TRUE,$C$5:$C$44) でした。 本当にご協力いただいたお二方ありがとうございました。 また何かありましたらよろしくお願いいたします。 (SAH後) 2018/10/23(火) 21:10