[[20141030152846]] 『MODでマイナスの値がとりたい』(ろでます) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『MODでマイナスの値がとりたい』(ろでます)

こんにちわ、ろでますです。
大変初歩的な質問となるかもしれませんが、ご容赦ください。

やりたいことは、12行づつ加算したものを、合計のSumMonth()の所に入れたいというものです。

表で書くとこうなります。
     [A]
[01] 表題が入っています
[02] 表題2が入っています
[03] 表題3が入っています
[04]  10 '加算1行目
[05]  10 '加算2行目
[06]  10 '加算3行目
[07]  10 '加算4行目
[08]  10 '加算5行目
[09]  10 '加算6行目
[10]  10 '加算7行目
[11]  10 '加算8行目
[12]  10 '加算9行目
[13]  10 '加算10行目
[14]  10 '加算11行目
[15]  10 '加算12行目
[16]  10 '加算1行目
[17]  10 '加算2行目
[18]  10 '加算3行目
[19]  10 '加算4行目
[20]  10 '加算5行目
[21]  10 '加算6行目
[22]  10 '加算7行目
[23]  10 '加算8行目
[24]  10 '加算9行目
[25]  10 '加算10行目
[26]  10 '加算11行目
[27]  10 '加算12行目



[40] SumMonth() '加算1行目同士の加算
[41] SumMonth() '加算2行目同士の加算
[42] SumMonth() '加算3行目同士の加算
[43] SumMonth() '加算4行目同士の加算
[44] SumMonth() '加算5行目同士の加算
[45] SumMonth() '加算6行目同士の加算
[46] SumMonth() '加算7行目同士の加算
[47] SumMonth() '加算8行目同士の加算
[48] SumMonth() '加算9行目同士の加算
[49] SumMonth() '加算10行目同士の加算
[50] SumMonth() '加算11行目同士の加算
[51] SumMonth() '加算12行目同士の加算

これを実現するために、下記のようなユーザー定義関数を作りました。

Function SUMMonth()

    Application.Volatile

    Dim i, STrow, row, col, result As Long

    row = Application.ThisCell.row
    col = Application.ThisCell.Column

    STrow = (row Mod 12) + 12

    For i = STrow To row - 12 Step 12
        result = result + Cells(i, col)
    Next i

    SUMMonth2 = result
End Function

例えば40行目は
12行目+16行目+28行目となってしまいます。
本来は、4行目+16行目+28行目となってほしいのですが、
(row Mod 12)+12 で、最初の行が必ず0+12となるので12行目になってしまうからです。
もし、Modで余り値がマイナスで返ってくれば4/12・・・-8でこれに+12されれば、本来望むべき最初の計算行4行目が取れて
40行目の値は
4行目+16行目+28行目
となります。

ちょっとややこしいご説明となってしまいましたが、このようにMODの余り値をマイナスでとることはできないでしょうか。

何卒よろしくお願い申し上げます。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 それマクロにする必要あるの?
 関数
 =SUMPRODUCT($A$1:$A$39*(MOD(ROW($A$1:$A$39)-ROW(A4),12)=0))
 ※ちょっと修正
 数式は余り知らないけど、↑のような感じでも出来ますよ。
(稲葉) 2014/10/30(木) 17:39

こんにちわ、ろでますです。
たかが一行のこの関数を理解するのにかなり時間がかかってしまいました。
Sumproductは今まであまり使ったことがなかったので調べてみると結構ややこしかったので・・・。

で、理解したんですが、条件として、3行目には日付(つまりシリアル値が入ってしまう)こと、間に行が挿入されることを想定すると、以下のようでもよろしいのではと理解しました。

=SUMPRODUCT(A$4:A39*(MOD(ROW(A$4:A39)-ROW($A4),12)=0))

でうまく動作したことを、ご報告させていただきます。
(ろでます) 2014/11/04(火) 13:52


 =SUM(A4,A16,A28)

 下へコピー。

 では駄目なの?
 
(GobGob) 2014/11/04(火) 14:15

 揮発性関数になるけど別案で。

 =SUMPRODUCT(N(OFFSET(A4,12*(ROW($1:$3)-1),0)))
 
(GobGob) 2014/11/04(火) 14:24

 >=SUM(A4,A16,A28)
 コピー前提ならこれで十分ですよね・・・言われて気付きました。
(稲葉) 2014/11/04(火) 14:36

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.