• ベストアンサー

エクセルのチェックボックスで計算

よろしくお願いします。 エクセルのセルに綺麗にチェックボックスを敷き詰める方法はありますか?(たとえばB2~G10全てに) その中で、チェックされたボタンを100円として、どこかのセルに関数で合計を出すにはどうすればいいですか?

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

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

こんにちは。 >綺麗にチェックボックスを敷き詰める方法はありますか? となると、マクロが一番よいと思います。 以下のコードをシートのタブの場所で、右クリックして、コードの表示 をクリックしますと、Visual Basic Editor 画面が現れますから、その場所に貼り付けます。 次に、リンクセルの位置をコードの中に書き入れます。以下では、右に、「10」セルとなっています。 それで、Alt + Q で画面を閉じたら、マウスで、貼り付ける場所を選択して、 Alt + F8 で、 [シート名].SettingCheckBoxes となっているものをクリック そうすれば、チェック・ボックスは張り付きます。 '----------------------------------------- Sub SettingCheckBoxes() Dim c As Range 'リンクセルは、右にいくつ? Const HOW_MANY_RIGHT As Integer = 10 'リンクセルは、下にいくつ? Const HOW_MANY_DOWN As Integer = 0 For Each c In Selection.Cells 'マウスで選択 With c  With CheckBoxes.Add(.Left, .Top, .Width, .Height)   .Caption = ""   .LinkedCell = c.Offset(HOW_MANY_DOWN, HOW_MANY_RIGHT).Address(0, 0)  End With End With Next c End Sub Sub ClearCheckboxes()  '失敗の時に消すマクロ  CheckBoxes.Delete End Sub '----------------------------------------- 例えば、上記の場合は、リンクセルを右に10セルということですから、L列~になりますから、 計算方法は、 =SUMPRODUCT(L2:Q10*100) TRUE/FALSE の値に、× 100 で計算ができます。

guchan00001
質問者

お礼

ありがとうございます。やってみたところ、エラーになり、デバックを押すと With CheckBoxes.Add(.Left, .Top, .Width, .Height) のところが黄色い帯になります。 どうしたらいいですか?

その他の回答 (3)

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

こんにちは。 >そうか、シートごとに書けたんですね・ シートモジュールは、特殊ですけれど、マクロを知らない方に教える場合、場所は簡単なのです。 >「作る方」はだめだったんです。 その場合は、デバッグで、ステップインモード(F8)を使ってみてください。どこで、問題が出ているか分ると思います。 たぶん、範囲の選択がなされていないからだと思います。 For Each c In Selection.Cells 'マウスで選択    ↓ For Each c In Range("B2:G10") と、予め範囲を決めうちして、行ってみてください。

guchan00001
質問者

お礼

何度もありがとうございました。ぜひ、我が家に来ていただきみっちり教えていただきたいです。何冊か参考書は買ってみたのですが、どうも、頭にしみこんできません。お恥ずかしい・・・^^; また、機会がありましたらよろしくお願いいたします。

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

こんにちは。 >ありがとうございます。やってみたところ、エラーになり、デバックを押すと With CheckBoxes.Add(.Left, .Top, .Width, .Height) エラーの原因は、登録するモジュールの場所違いです。できれば、シートモジュールに貼り付けし直してほしいのです。(といっても、分らないかもしれませんね)今回、私は、わざと省略型にしましたので、とりあえず、以下のように直して試してください。  With CheckBoxes.Add(.Left, .Top, .Width, .Height)   ↓  With ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height) と直してください。 以下も同じです。 Sub ClearCheckboxes()  '失敗の時に消すマクロ  ActiveSheet.CheckBoxes.Delete End Sub

guchan00001
質問者

お礼

解かりました、ありがとうございます。 実は少しはVBAもかじっていまして、自分なりに「失敗を消すマクロ」の方は、sheet1.をくっつけてみたら出来たのですが、「作る方」はだめだったんです。そうか、シートごとに書けたんですね・・・。今まで、わざわざ標準モジュールに書いていました^^;

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

>エクセルのセルに綺麗にチェックボックスを敷き詰める方法はありますか 「きれいに」「敷き詰める」とは? Caption(文字の部分)も含めてですか。 チェックボックスの四角の部分を大きくすることはできないと思います(過去に質問がありました)。1つのセルに貼り付け、他のセルを指定して、そこに複写する方法はどうですか。 VBAならできそうです。関数でチェックボックスを貼り付けたり、そのプロパティを左右することは絶対できません。 >チェックされたボタンを100円・・・ まずVBAでならできます。 それを使わない場合 LinkedCellという「プロパティ」の指定ができるので、そのセルの「値」(TRUE,FALSE)を対象にして、COUNTIF関数などでできる。 A1:D1のチェックボックスのLinkedCellをA3,B3,C3,D3に指定して A3:D3で TRUE FALSE TRUE TRUE 3 C4に =COUNTIF(A3:D3,TRUE)でやって見ると、うまくいきました。

関連するQ&A

専門家に質問してみよう