エクセルで、フォームにあるチェックボタンを使います。で、チェックの入ったものだけについて合計を出したいのですが・・・
例を書きます。
  
    A       B       C
1  品名     チェック欄     数量
2   あ       ○       10
3   い               20
4   う       ○       30
5   え               40
6   お       ○       50
7                   90
  ここであ,う,おにチェックが入っているので
  10+30+50=90の計算をさせたいのですが。
  チェックのあるものだけの合計をC7に表示させたいのです。
  チェックボタンでIF関数を使うにはどうしたらよいのでしょうか?
  

   

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんばんは



>SUMPRODUCTは積の和を返すのではなかったかしら?
試されてみてからの回答でしょうか?
ヘルプをご覧になったようですが肝心な箇所を読み逃し
ているような・・・・配列関数であることを利用した
もので複数の条件を選り分けて、和を求められます。

>お答えのSheet2はSheet1を日付順に並べ
>替えたものですか?
違います。
ランダムに並ぶご希望通り指定した日付に合致した
ものを抽出して合計するものです。

>DSUM又はSUMIFではどうでしょう?
DSUMは同様の結果を得られますが条件を別セルに
記載する必要があります。
SUMIFは今回の例の場合、同じですが条件が複数
****/*/* で かつ 商品A の場合の合計
や ****/*/*~****/*/* の間の合計
などでは使えません!

>画面にカレンダーを表示してクリックするとか・・
同計算式は、Sheet2のB列をカレンダー上にして
使う事を想定して立てた式です。
あとは応用だけですが・・・・!

試されずに他の関数を希望され、指定されていると言う
ことはご希望に敵わなかったと判断します。
これにて私は、降りますので他の方のご意見をお待ち
下さい!

この回答への補足

素人のくせに生意気なことを言ってすみませんでした。怒り心頭というのが痛いほどに感じられました。試してみたのです。お答えによるとSheet2は日付順に並べ替えたものではないんですね。 ”ランダムに並ぶご希望通り指定した日付に合致したものを抽出して合計するものです。” ということですが、Sheet2がどのように作られたのかわからず、教えていただいたようにsheet2を作り式を入れてみたのですが何も起こらず、ゆっくり考えてみようと思いました。 ”お考えのものと違ったらスミマセン!”とありましたので取り敢えずお礼とこちらの求めているものをお知らせしようと思ったわけです。DSUM又はSUMIFがこの場合適さないこともよく分かりました。ありがとうございました。

補足日時:2001/09/29 23:52
    • good
    • 0

こんばんは!



>毎日の集計も(受注数,出荷数)したいんです

表の構成がわからないので単純な以下の表で説明します

----SHeet1------------------------
  A     B     C     D
1 品名   受注日   出荷日  数量
2 あ    2001/*/* 2001/*/*  **
3 い    2001/*/* 2001/*/*  **


n あ    2001/*/* 2001/*/*  **

----SHeet2------------------------
  A   B    C
1 品名 日付   受注数量 出荷数量
2  ? 2001/*/1  式1   式2
3    2001/*/2   ↓    ↓

品名を無視して数量の合計をしてよいのであれば
式1
 =SUMPRODUCT((Sheet1!$B$2:$B$n=A18)*(Sheet1!$D$2:$D$n))

式2
 =SUMPRODUCT((Sheet1!$C$2:$C$n=A18)*(Sheet1!$D$2:$D$n))

nは最大想定行でOKです。

同様の数式で特定期間の集計や品名の集計なども簡単に行えます。

お考えのものと違ったらスミマセン!

この回答への補足

回答ありがとうございました。SUMPRODUCTは積の和を返すのではなかったかしら?
勉強不足ですので、すみません。お答えのSheet2はSheet1を日付順に並べ替えたものですか?それならDSUM又はSUMIFではどうでしょう?

最終的に何をしたいかをまず言わなくてはいけないですね。
私の会社(工場)ではコンピュータで受注が入ってきます。数社とネットワークで結んでいて,各社からの受注がコンピュータ上に一覧表で表されています。ですからデータは毎日更新されます。納期の変更、数量の変更などもあります。受注の日付順に並んでいますから、当然納期はバラバラです。このデータから納期日毎の受注合計数を出したいと思っているのです。私の会社ではパソコン触れる人がいませんので、面倒な操作なしで、たとえばボタンひとつで「今日はAを○個、Bを△個作ればいいんだな」とわかるように。それで昨日お聞きしたチェックボタンも使えれば、出荷済の合計(未出荷の合計でもよい)もわかり、あとどれだけ今日つくればいいかもわかり・・・・というわけです。ネックは元のデータが納期順になっていないということです。画面にカレンダーを表示してクリックするとか・・なんかいいアイデアありませんか?

補足日時:2001/09/29 20:41
    • good
    • 0

こんばんは!



フォーム のチェックボックスの例です。

チェックボックスをB2~B6へ配置

 B2のチェックボックス上で 右クリック 書式設定
 コントロールタブ リンクするセル欄に B2

以降
 B3~B6まで同様の作業
 それぞれリンクするセル B3~B6と記入

 面倒ですが1つずつ設定する必要があります。

セルC7に数式 =SUMIF(B2:B6,TRUE,C2:C6)

動作が確認できたら
セルB2:B6を選択 フォントの色を白に設定

こんな感じでどうでしょうか!試してみて下さい!

<チェックボックスの書式設定>
他にも 3D表示させたり
指定の色で塗つぶしたり、枠線をつけたりも可能です。

この回答への補足

ありがとうございました。思い通りのものができました!ついでにもうひとつ。先ほどの表のチェックは出荷したかどうかのチェックです.元の表は受注日の順になっています。もちろん出荷日の欄もあります。これを出荷日毎に並び替えてかつ、毎日の集計も(受注数,出荷数)したいんです。刻々とデータはかわっていくのですが、常に日毎の集計が出ているように表をつくりたいのです。画面を見るたびに日付順に並び替えることをしなくてもいいように。こんな説明でわかりますか?

補足日時:2001/09/29 00:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシートのボタンからフォーム出した場合、チェックボタンの動作がうまくいきません

フォーム上の2つのチェックボタンをトグルさせたいのですが、シート上に設定したコマンドボタンからフォームを表示させると、トグルがうまくいきません。
尚、メニューからフォームを表示させた場合、正しく動作します。
回避させる手段はあるでしょうか?
これはエクセルの仕様なのでしょうか?
Excel2003です(英語版)。英語版Windows7Proです。

フォームのVBA
Private Sub UserForm_Initialize()
  CheckBox1.Value = True
  CheckBox2.Value = False
End Sub
Private Sub CheckBox1_Click()
  CheckBox1.Value = True
  CheckBox2.Value = False
End Sub
Private Sub CheckBox2_Click()
  CheckBox2.Value = True
  CheckBox1.Value = False
End Sub

シートのVBA
Private Sub CommandButton4_Click()
  sb_UserForm1Show
End Sub

標準モジュール
Sub sb_MenuCreate()
  sb_MenuDelete
  Dim myMnu As Object
  Dim Cap_P As String
  Cap_P = "Prototype"
  Set myMnu = CommandBars("Worksheet menu bar").Controls.Add(Type:=msoControlPopup, Before:=3)
  With myMnu
    .Caption = Cap_P
  End With
  sb_Menu01 Cap_P, "Delete This Menu", "sb_MenuDelete"
  sb_Menu01 Cap_P, "RecoverTest", "RecoverTest"
  sb_Menu01 Cap_P, "Clear DataBase", "sb_ClearDatabaseConf"
  sb_Menu01 Cap_P, "Show All Data", "sb_ShowAllData"
  sb_Menu01 Cap_P, "Remove Autofilter", "sb_RemoveAutofilter"
  sb_Menu01 Cap_P, "Add Autofilter", "sb_AddAutofilter"
  sb_Menu01 Cap_P, "Remove Sub Total", "sb_RemoveSubtotal"
  sb_Menu01 Cap_P, "Add Sub Total", "sb_AddSubtotal"
  sb_Menu01 Cap_P, "Load Form", "sb_UserForm1Show"
  sb_Menu01 Cap_P, "Import to FishDataBase", "sb_Main01"
End Sub

Sub sb_Menu01(Cont_P As String, Cap_P As String, On_Act As String)
'Menu Create submodule
  With CommandBars("Worksheet menu bar").Controls(Cont_P)
    .Controls.Add(Type:=msoControlButton, Before:=1).Caption = Cap_P
    .Controls(Cap_P).OnAction = On_Act
  End With
End Sub

Sub sb_UserForm1Show()
  UserForm1.Show
End Sub

フォーム上の2つのチェックボタンをトグルさせたいのですが、シート上に設定したコマンドボタンからフォームを表示させると、トグルがうまくいきません。
尚、メニューからフォームを表示させた場合、正しく動作します。
回避させる手段はあるでしょうか?
これはエクセルの仕様なのでしょうか?
Excel2003です(英語版)。英語版Windows7Proです。

フォームのVBA
Private Sub UserForm_Initialize()
  CheckBox1.Value = True
  CheckBox2.Value = False
End Sub
Private Sub CheckBox1_Click()...続きを読む

Aベストアンサー

そのような処理に適したオプションボタンがあるにも拘らず
なぜ、チェックボックスを使うのか、ん? という感じではありますが、、、

ま、それは置いといて。。。。

提示のコードではCheckBoxのClickイベントが発生し続けるので
質問の動作は当たり前の動作になります。


 Private Sub UserForm_Initialize()
   CheckBox1.Value = True  ●CheckBox1のClickイベント発生

 Private Sub CheckBox1_Click()
   CheckBox1.Value = True  ●CheckBox1のClickイベント発生


▼~▲のClickイベントが発生し続けるのでストップしているように見えるわけです。

これは、CheckBox1,2のClickイベントの最初に、
MsgBox "box1"など入れてみれば確認できますね。

で、CheckBoxのClickイベントを止めてやればいいわけですが、
UserFormには、Application.EnableEventsなどのメソッドがないので
普通はフラグを使ったりしますが、
今回の場合は、Changeイベントの性質を利用してもできます。

●Changeイベントを使う方法
'--------------------------------------------
Private Sub UserForm_Initialize()
   CheckBox1.Value = True
End Sub
'-------------------------------
Private Sub CheckBox1_Change()
   CheckBox2.Value = Not CheckBox1.Value
End Sub
'-------------------------------
Private Sub CheckBox2_Change()
   CheckBox1.Value = Not CheckBox2.Value
End Sub
'---------------------------------------------

UserForm_Initializeでチェックするのは、CheckBox1だけで十分だと思います。

 
●また、フラグを使う方法は、Clickイベントの部分で
  If Flag = True Then Exit Sub
などとしてClickイベントの処理をジャンプする方法です。
これはご自分で考えてみてください。


最初でも言いましたが、
今回のような処理は、オプションボタンを使うべきかと。
ま、いろいろ理由はあるのでしょうが。。。
以上です。

そのような処理に適したオプションボタンがあるにも拘らず
なぜ、チェックボックスを使うのか、ん? という感じではありますが、、、

ま、それは置いといて。。。。

提示のコードではCheckBoxのClickイベントが発生し続けるので
質問の動作は当たり前の動作になります。


 Private Sub UserForm_Initialize()
   CheckBox1.Value = True  ●CheckBox1のClickイベント発生

 Private Sub CheckBox1_Click()
   CheckBox1.Value = True  ●CheckBox1のClickイベント発生


▼~▲のClickイベントが発...続きを読む

Q[Access97]フォーム上のボタン操作でチェックボックスにチェックが入るようにしたい

Accessでテーブルを元にしていない単独のフォームを作っています。
クエリで抽出条件をパラメータで入力させるのと同様に、日付を入力してレポートをプレビュー表示させるためのフォームです。
集計表を作成するレポートの名前が入ったチェックボックスがフォームにあり、クリックひとつですべてのチェックボックスにチェックを入れるボタンを設置しています。
(画面図:例)
(キャンセルなし集計ボタン)(キャンセルあり集計ボタン)
□報告書集計 □キャンセルあり報告書集計
□記録集計  □キャンセルあり記録集計
(キャンセルボタン) (レポート出力ボタン)
上図の左のふたつにはデフォルトでチェックが入っています。
キャンセルあり集計ボタン
・クリックすると右の2つにもチェックが入る。
キャンセルなし集計ボタン
・クリックすると右の2つのチェックが取れる。
これら2つの処理はVBAで Me!報告書キャンセルチェック.Value = True 等としていますが、「プロパティクリック時でエラーが発生しました」となり、うんともすんとも動きません。
レポート出力ボタン
・クリックするとそのときにチェックが入っている集計レポートをプレビュー表示する。ただしキャンセルあり~にチェックがある場合はそのすぐ左の集計は出力しない。
これもVBAで
If Me!報告書チェック.Value = True And Me!報告書キャンセルチェック.Value = True Then
DoCmd.OpenReport "報告書集計表(キャンセルあり)"
ElseIf Me!報告書チェック.Value = True Then
DoCmd.OpenReport "報告書集計表"
End If
等としてますが、やはりエラーが出ます。
VBが間違ってるのか、設定を変えてもそれをフォーム上に視覚的に反映させてないからか、それともソースとなるテーブルがないからでしょうか?

Accessでテーブルを元にしていない単独のフォームを作っています。
クエリで抽出条件をパラメータで入力させるのと同様に、日付を入力してレポートをプレビュー表示させるためのフォームです。
集計表を作成するレポートの名前が入ったチェックボックスがフォームにあり、クリックひとつですべてのチェックボックスにチェックを入れるボタンを設置しています。
(画面図:例)
(キャンセルなし集計ボタン)(キャンセルあり集計ボタン)
□報告書集計 □キャンセルあり報告書集計
□記録集計  □キャンセル...続きを読む

Aベストアンサー

>>やはりエラーが出ます。
 何というエラーが出るかがわからないと想像できませんよ。自分も特にコードにおかしいものは見当たりません。
Me!○○

Me.○○
とした方が候補がリストで出て来るので、コントロール名のミスなどがあればすぐわかると思います。


>>それともソースとなるテーブルがないからでしょうか?

 これは関係ないです。
 フォームの「更新の許可」プロパティは「はい」になっていますか?

Qエクセルのフォームで○のチェックボックスがほしいです。

はじめまして。よろしくお願い致します。
エクセル(2003)で、フォームの中にチェックボックスがあるのですが、チェックを入れると「レ」がでます。これをクリックしたら、「○」がでるチェックボックスがほしいのですが、どのようなVBAにしたらよいのか教えてください。お願いします。

Aベストアンサー

トグルボタンで作成しては?

Private Sub ToggleButton1_Click()
If Me.ToggleButton1.Value = True Then
Me.ToggleButton1.Caption = "○"
Else
Me.ToggleButton1.Caption = ""
End If
End Sub

Qアクセスで抽出+合計

アクセス2003を使用しているんですが、
どうしてもわからないので教えてください。

アクセスのテーブルで

会社名1 会社名2   金額1   金額2
     
A社    B社    5000    4000
B社    C社    2500    1000
C社    D社    7000    4500

とこんな感じにデータがあります。
会社名・金額はそれぞれ5つ設けてあります。
わけがあり、別々に列を設けるしかありません。
このテーブルから、たとえばB社の金額の合計を
出してきたいのですが。
この表ですと、B社 6500  と表示させたいのです。
B社だけではなく、全会社いっせいにあらわしたいのです。
可能なのでしょうか?
SQLでもかまいません。
お願いいたします。

Aベストアンサー

なんか問題ありありのテーブル構造ですね、何かからの出力データ?
とりあえず、元のテーブル名を tbl として例題ならこんな風?

select 会社名,sum(t1.金額) AS 合計
from
(select 会社名1 as 会社名,金額1 as 金額 from tbl
union all
select 会社名2 ,金額2 from tbl) as t1
group by t1.会社名;

会社名1~会社名5、金額1~金額5まであるのでしたら
select 会社名,sum(t1.金額) AS 合計
from
(select 会社名1 as 会社名,金額1 as 金額 from tbl
union all
select 会社名2 ,金額2 from tbl
union all
select 会社名3 ,金額3 from tbl
union all
select 会社名4 ,金額4 from tbl
union all
select 会社名5 ,金額5 from tbl) as t1
group by t1.会社名;

かな?

なんか問題ありありのテーブル構造ですね、何かからの出力データ?
とりあえず、元のテーブル名を tbl として例題ならこんな風?

select 会社名,sum(t1.金額) AS 合計
from
(select 会社名1 as 会社名,金額1 as 金額 from tbl
union all
select 会社名2 ,金額2 from tbl) as t1
group by t1.会社名;

会社名1~会社名5、金額1~金額5まであるのでしたら
select 会社名,sum(t1.金額) AS 合計
from
(select 会社名1 as 会社名,金額1 as 金額 from tbl
union all
select 会社名2 ,金...続きを読む

QAccess2003のフォーム上にてレコードの編集を禁止するチェックボタン

Access2003のフォーム上にて,表示されているレコードの編集を禁止するチェックボタンをつける方法を教えてください.

日記データベースをつくっています.日付とタイトルと内容の記入欄を作ることができました.記入し終わったら,チェックボタンにチェックを入れることにより,そのレコードの編集を禁止したいと考えています.

どのように行えばよいのでしょうか.

Aベストアンサー

日付とタイトルと内容・・・ のテーブルに新たに CHK というフィールドを加えます
フィールドサイズは Yes/No型
初期値は Yes

フォームに CHK フィールドも配置します。

フォームのレコード移動時イベントに
Private Sub Form_Current()
  Me.AllowDeletions = Me!CHK
  Me.AllowEdits = Me!CHK
End Sub

とすれば CHK を Noに(チェックを外せば)
編集も削除も出来なくなります。(CHKの変更も含めて)
一旦、No にした後で、Yesに戻したいときには
テーブルを開いて行ってください。(^^ゞ


あと、間違ってCHKを外さないように
CHK の更新前イベントに

Private Sub CHK_BeforeUpdate(Cancel As Integer)
If MsgBox("チェックを外すとと以後、編集も削除もできません", vbOKCancel, "確認") = vbCancel Then
  Cancel = True
  Me.Undo
End If
End Sub

と入れておいては?

日付とタイトルと内容・・・ のテーブルに新たに CHK というフィールドを加えます
フィールドサイズは Yes/No型
初期値は Yes

フォームに CHK フィールドも配置します。

フォームのレコード移動時イベントに
Private Sub Form_Current()
  Me.AllowDeletions = Me!CHK
  Me.AllowEdits = Me!CHK
End Sub

とすれば CHK を Noに(チェックを外せば)
編集も削除も出来なくなります。(CHKの変更も含めて)
一旦、No にした後で、Yesに戻したいときには
テーブルを開いて行ってください。(^^...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報