- ベストアンサー
SUMIFを使って週毎の合計を出したい
毎日の 株の売買損益を入力したデーターを元に (WORKDAY(TODAY(),0,データ元の年月日列)式内の 0を0から-10まで変化させ、直近10日間のひにちを表示し 隣の列にSUMIF関数で 毎日の損益集計を出しています。 これを週別でもやりたいのですが、お助け下さい。 今週、先週、先々週、と5週~10週の各週損益合計です。各週は月曜から金曜です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
WEEKNUMを使えばできると思います。 (WEEKNUM(TODAY())-n(nを0から-10まで変化させる)と (WEEKNUM(データ元の年月日列))を比較すれば良いと思います。 スキルがある方と思われますので、他の部分は省略します。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
下記のようなやり方を提案してみます。 もっと良い回答の出る余地があると思いますが、そう単純な問題では無い様です。VBA(プログラム)を使わざるを得ないのではと思いました。 ご質問者のニーズに近づいたのでは無いかと思いますが ズバリと言う自信がありません、なにかあれば補足してください。 (1)「週」を問題にしておられるので、エクセル関数ではWEEKNUMの利用を注目せざるを得ないでしょう。 その他では、週という括りで考え難いですから。 またWEEKNUMは日曜-土曜を同一週と考えてくれるし、日、土は取引がない(データが発生しない・出てこない)ので、実質障害にはならないでしょう。しかし (2)SUMIF関数は第1引数で範囲指定しますが、比較判別するセル範囲です。しかしこの各々のセルの日付けに対し、WEEKDAYをかぶせて=sumif(WEEKDAY(A1:A360),・・・) とは出来ないと思います。 1列増やして=WEEKNUM(A320)などワーク列として週番号列を作る手もあります。 (3)そのため、関数でやると相当複雑になるか、出来ないかになると考え、ユーザー関数を考えました。 ところがWEEKNUM関数はVBAでworksheetfunctionで使えないようでしたので、私製しました(下記weeknumsです)。 下記のプログラムと(4)のプログラムはVBE画面の標準モジュールに貼りつけます。 エクセルのユーザー(定義)関数が初めてであれば、本を見るかWEB照会してください。 http://member.nifty.ne.jp/bear/extec/extec07.htm http://www.katch.ne.jp/~kiyopon/soft/migi.htmなど --- Function weeknums(b As Date) d1 = Weekday(DateSerial(Year(b), 1, 1)) d2 = DateSerial(Year(b), 1, 1) d3 = DateSerial(Year(b), Month(b), Day(b)) wn = 2 + Int((d3 - d2 - d1) / 7) weeknums = wn End Function (5)指定した日付と同じ週の計数を合計する関数 =sumifs()を私製で作りました。sumifsは勝手に付けた名前で、真正関数群と違う名ならOKです。 Function sumifs(a As Range, b As Date, c As Range) Dim cl As Range t = 0 For Each cl In a If weeknums(cl.Value) = weeknums(b) Then t = t + Cells(cl.Row, c.Column) End If Next sumifs = t End Function (4)使い方は、週合計を出したいセルに =sumifs(A1:A330,A320,B1:B330)のように入れます。 第1引数--日付を探す範囲。 第2引数--その週のどれか1日の日付の入ったセル番地 第3引数--集計したい計数の入ったセル範囲。 第1引数の列記号だけ集計列に変えたもの。 例としてA320:B326に下記データがあるとします。 2003/11/16 1 2003/11/17 2 2003/11/18 3 2003/11/19 4 2003/11/20 5 2003/11/21 6 2003/11/22 7 =sumifs(A1:A330,A320,B1:B330)を入れると28になります(この場合1-7の合計)。 ただし、年を越えた日付が混じると、どうなるか十分テストしてないので、本番で投資損が出たら大変ですから、十分納得修正のうえ、考えてください。
お礼
ありがとうございました。 #NAME? になってうまく行きません。 VBAProject(PERSONAL.XLS)にModule9を「標準モジュール挿入」で新設し、ご案内のコピーを2回に分けて貼り付けました。 7月31日から8月20日までの既存のデータでやってみました。 困憊してしまいました。明日再トライしてみます。
補足
無知者が苦難の末、いま、私流で、らしき物出来ました。 NO#1 の方に書き込みしました。 見てくれ悪いです。
お礼
ありがとうございました。 スキル怪しいためかうまく行きませんでした。 以下は試行錯誤の末、今できた、怪しげな方法です。 P列は約定年月日(p20=8月1日)、T列は損益金額、 新しい列WにWEEKNUM(P20,)と式を入れると32と出ます。 (下にコピーもします)。 =+SUMIF(W$20:W$100,W20,T$20:T$100) これで一応8月1日以降の週の損益合計が出ました。 欠点は金額が同一週全てに表示されるかっこわるさ。