- ベストアンサー
[エクセル]チェックしたセルに書かれている文字の合計
エクセルで年間の行事予定表を作っています。 4月 5月 ----------------- ----------------- 1日 月 空白 1日 木 v ------------------ ----------------- 2日 火 v 2日 金 空白 ------------------ ------------------ 3日 水 v 3日 土 v ------------------ ------------------ というように、横並びで4月から3月までの表です。 各月は日付、曜日、チェック欄の三列からなります。 (この表示フォーマットはかえられません) 各月ごとに、月曜日~日曜日ごとvがついた合計を 集計したいのですが、よくわかりません。 ご存知の方がいらっしゃいましたら、よろしくご教授ください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
例えば4月のデータがA2:C32に入力されているとして、 4月の曜日別チェック数をB36:C42に表示させるとします。 B36:B42に「月」~「日」の文字が入力されているとして、 C36に =SUM(IF(B$2:B$32=B36,IF(C$2:C$32="v",1))) と入力した後に、「ShiftキーとCtrlキーを同時に押しながら」Enter キーで確定させると、月曜日のチェック数が表示されます。(式の両端に{ } が付きます。この数式は配列数式と言います) あとは、C36の式をC42までコピーすれば4月の分は完成します。 5月以降もその式を列方向にコピーして使うことができます。 参考)配列数式 http://www.hcs.co.jp/hitschool/qa_excel13.htm http://pc21.nikkeibp.co.jp/special/hr/hr1.shtml
その他の回答 (7)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一応、縦に日付が出されたものだということで、考えてみました。 今のところ、書き出す場所を分りやすいようにしていますが、移動しても構いません。 A1:A31 までが日付(シリアル値)を表示したものとします。B1:B31 までは、曜日、C1:C31 までは、"v"を用いた、チェック欄ということにします。 A32 は、空白にしてください。 A33: =DATE(YEAR(A1),MONTH(A1),8+(ROW(A1)-1)*7)-WEEKDAY(DATE(YEAR(A1),MONTH(A1),7)) B33:(第1日曜日~) =SUMPRODUCT(($A$1:$A$31>A32)*($A$1:$A$31<=A33)*($C$1:$C$31="v")) これで、次の月が出るところまで、フィルダウン・コピーします。 これで出来るのではないかと思います。
お礼
ご回答ありがとうございます。 この数式は、私にはなかなか思い浮かびません...。 ひとつの質問で、皆さんのおかげでずいぶん勉強になります。
- imogasi
- ベストアンサー率27% (4737/17069)
もし月別かつ曜日別なら、#6の例で F2に「月」オートフィルで火から日まで作る。 F34に=SUM(IF(($C$2:$C$32="v")*($B$2:$B$32=F2),1,0)) と入れてSHIFT+CTRL+ENTER F40まで複写。 結果(E列E34:E40はオートフィルで作ったもの) E列 F列 月 1 火 3 水 3 木 2 金 3 土 3 日 0
お礼
ご丁寧にありがとうございます。 おかげでずいぶん理解できて来ました
- imogasi
- ベストアンサー率27% (4737/17069)
下記は使えませんか。 例データ 2005/12/1 木 1 2005/12/2 金 v 1 2005/12/3 土 v 1 2005/12/4 日 1 2005/12/5 月 v 2 2005/12/6 火 2 2005/12/7 水 v 2 2005/12/8 木 2 2005/12/9 金 v 2 2005/12/10 土 v 2 2005/12/11 日 2 2005/12/12 月 3 2005/12/13 火 v 3 2005/12/14 水 3 2005/12/15 木 v 3 2005/12/16 金 3 2005/12/17 土 3 2005/12/18 日 3 2005/12/19 月 4 2005/12/20 火 v 4 2005/12/21 水 v 4 2005/12/22 木 v 4 2005/12/23 金 4 2005/12/24 土 v 4 2005/12/25 日 4 2005/12/26 月 5 2005/12/27 火 v 5 2005/12/28 水 v 5 2005/12/29 木 5 2005/12/30 金 v 5 2005/12/31 土 5 ーーーーー A2:A33までオートフィルで日付(シリアル値) B列B2は=TEXT(A2,"aaa") D列は作業列でD2は=COUNTIF($B$2:B2,"月")+1 B,c列は式を31日まで複写。 C34セルに(空きのセルならどこでも良い) =SUM(IF(($C$2:$C$32="v")*($D$2:$D$32=ROW()-33),1,0)) と入れて、SHIFT+CTRL+ENTERを同時に押す(配列数式) C38まで式複写。 結果B34:C38(B34:B38は入力と書式設定) B列 C列 第1週 2 第2週 4 第3週 2 第4週 4 第5週 3
補足
ありがとうございます。 お教えいただいたものは、各週ごとのvの数を集計し、 なおかつ、vの横に各曜日ごとの日数を合計しているのですね。 思いもよりませんでした。 参考になります。そもそも配列数式というものを 知らなかったもので、前の方にお教えいただいたページを参考に現在さっそくいろいろ試してみていました。
- taka451213
- ベストアンサー率47% (436/922)
#1です。 失礼しました。 質問文を読み間違えてました・・・。
お礼
ご丁寧に、訂正をありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
>月曜日~日曜日ごとvがついた合計を この意味をはっきりさせてほしい。 月ごとvの数なら簡単だが、 月初日から第一日曜日 第2週 第3 第4 最終月曜日から月末日 のように集計したいのでしょうか。 これは複雑になりそう。 VBAでなら何とかなりそうだが。
補足
質問がわかりにくく申し訳ありません。 最初の質問に示したような、4月1日から3月31日までの表があります。 それに関して、月ごとに、月曜日はvが2個、火曜日はvが0個と いうふうにまとめたいのです。最終月曜日からという 複雑なものではなく、1~31日までです。
<力技> =ABS(A1="v") + ABS(B1="v") + ・・・ + ABS(N1="v") で横集計し、縦集計。 <スマート> カレンダーの該当するセルを集計するVBA関数を作成する。
お礼
ご回答ありがとうございます。 最初、力技でやろうとしていたのですが、なにかあるんじゃないかと思ったしだいです。 スマートな方法も考えてみます。
- taka451213
- ベストアンサー率47% (436/922)
マクロなしなら・・・、 1.チェックマークが入る右に列を追加して、非表示にでもしておく。 2.そこに式を入れる。 (例)IF(チェックを入れる列のセル番号="v",1,0) 3.下までコピー(必要分フィル) 4.最後にSUM でいいかな?
お礼
さっそくのご回答ありがとうございます ご提示いただいた方法ですと、各曜日ごとのvをつけた合計ではなく、月のvの合計を 数えることにならないでしょうか。
お礼
ご回答ありがとうございます。 まさにこれです! 配列数式というんですね。 さっそく試したところうまくいきました。 ありがとうございます。