Mod関数とRow関数の使い方について

このQ&Aのポイント
  • Mod関数とRow関数を使って合計を計算する方法について調査しています。
  • ネット上で見つけた方法を試したが、うまく計算できない問題が発生しています。
  • 同じ数式の中でも一部のセルで異常な値が出る問題があり、なぜそうなるのか理解できません。
回答を見る
  • ベストアンサー

Mod(row)***

=SUM(IF(MOD(ROW(A1:A20),4)=MOD(ROW(A3),4),A1:A20)) と、ネットに書いてある通り入力しても0になるか最後に,””を入れた場合、Valueになってしまいます。 理解しようと簡単な数字でやっているのですが計算ができません。 最初はMod、Row関数の意味から調べました。 昔、会社の技師が入力した関数を噛み砕こうとしています。 技師の入力したものは。範囲が200ほどあり、4行ごとの1行目の合計、別に2行目の合計を作成されています。 時々、おかしくなったから直してと言われることがあり、取り急ぎコピペで事なきを得ましたが、 理解したいと思っています。 ただ、実際に入ってる場所で同じ形で同じ関数を入れて作成すると、あるセルはちゃんと計算できるのですが、 あるセルだけは39,248,338分足された値が出てきます。 まったく同じ数式なのでなぜそうなるのかわかりません。 どなたかお詳しい方よろしくお願い致します。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.5

No1のお礼に対しての返信です。 配列数式にしない =SUM(IF(MOD(ROW(A1:A20),4)=MOD(ROW(A3),4),A1:A20)) だと MOD(ROW(A1:A20),4) は MOD(ROW(A1),4) と同じになり範囲を指定したことにならないのです。 ROW(A1)とROW(A3)が違い計算結果が真とはならないのでSUMでは何も足されずに0になります。 > あるセルだけは39,248,338分足された値が出てきます これは MOD(ROW(A1:A20),4) のセル範囲指定の最初のセル番地と =MOD(ROW(A3),4) のセル番地が一致したときにすべてのセルが足されてしまった結果だと思います。 たとえば MOD(ROW(A1:A20),4)=MOD(ROW(A1),4) となったとき ROW(A1)とROW(A1)が同じなので計算結果が真となりSUMでは最後に指定されたセル範囲が全て足されます。 > でもそうすることで何が変わって計算ができるようになるのですか? =IF(MOD(ROW(A1),4)=MOD(ROW($A$3),4),A1,"") たとえばC1に上記を入力してそれをC20までコピーして で合計を出したいセルに =SUM(C1:C20) と入力する。 ということを一つの式と一つのセルでできるようになるということです。

petitcoucou
質問者

お礼

ご丁寧な説明をありがとうございます。 0になったり付加される事は理解したと思います。でも、これらの事を考える方がいらっしゃる事に凄いですと凡人の私には思うだけです。 少しづつですが頑張って理解したいです。出来たら便利ですよね。ありがとうございました。

その他の回答 (4)

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

解説・説明用に、参考に書いてみました。 まだるっこしいようなら無視して。 例データ A1:A20 下記 B列はB1:B20を範囲指定し、B1をアクチブにして=IF(MOD(ROW(A1:A20),4)=3,1,0)と入れてSHIFT+CTRL+ENTERの3キーを同時押し。 原作者がMOD(ROW(A3),4)と書いた意図はよくわからない。3で済むように思った。 C列はC1:C20を範囲指定して、C1をアクチブにして、 =(A1:A20)*(B1:B20)と入れてSHIFT+CTRL+ENTERの3キーを同時押し。 1 0 0 2 0 0 3 1 3 4 0 0 5 0 0 6 0 0 7 1 7 8 0 0 9 0 0 10 0 0 11 1 11 12 0 0 13 0 0 14 0 0 15 1 15 16 0 0 17 0 0 18 0 0 19 1 19 20 0 0 最後にC1:C20のSUMをどこかのセルに出す。 以上を1つの式で済ましたものが質問の式。普通は、B,C列を使わず、質問に出ている1つの式で済ます。しかし配列数式という仕組みを使うので、知らない人は、面くらうかも。 結果の見てくれが、数式バーを見ないと配列数式ということがわかりにくい。 ROW(A1:A20)のような、書き方から配列数式かなと気づく。普通の使い方では、ROW(A1)と言うような書き方をする。「セル番地:セル番地」が来るのはSUM関数などの、複数数値ーー>1数値(代表値)写像の、集合関数ですから。

petitcoucou
質問者

お礼

すみません。 まだ噛み砕けていません。 が説明ありがとうございます。 よく勉強したいと思います。 ありがとうございました。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

誤記訂正 誤:MOD(ROW(A1:A20),4) これはA1:A20の各列数を4で割った余りですので…… 正:MOD(ROW(A1:A20),4) これはA1:A20の各行数を4で割った余りですので……

petitcoucou
質問者

お礼

ありがとうございます。 列と行はいつも悩みます。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

これ、「Ctrl」+「Shift」+「Enter」で配列数式にする式ですね。 A3、A7、A11、A15、A19 と、3行目から始めて3つ置きのセルの合計値を求めています。 ザックリ説明すると、 まず、MOD(ROW(A3),4) これは3です。 MOD(ROW(A1:A20),4) これはA1:A20の各列数を4で割った余りですので結果は、1,2,3,0,1,2,3,0,……の繰り返しになります。 で、この繰り返しの値が3に等しい時のA列の値を合計しています。 解りにくいですよね。

petitcoucou
質問者

お礼

はい、関数の意味は理解できたのですが、どうしてそうなるかは理解できていません。外国語のように無理やり納得している状態です。 CtrlとShiftを押してやればできました。 どうしてなのかネットにも載っていますでしょうか? ありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1606/2443)
回答No.1

多分配列数式だと思います。 CtrlとShiftを押しながらエンターしてみてください。 見た目が以下のようになると思います。 {=SUM(IF(MOD(ROW(A1:A20),4)=MOD(ROW(A3),4),A1:A20))} 配列数式の場合、数式バーをクリックしてそのままエンターとかすると配列数式じゃなくなるのでそれでおかしくなっているのだと思います。 数式のあるところをロックしてシートの保護をしておくといいかもしれません。 また、以下のようにするとその危険性はなくなると思います。 =SUMPRODUCT((MOD(ROW(A1:A20),4)=MOD(ROW(A3),4))*(A1:A20))

petitcoucou
質問者

お礼

ありがとうございます。 CtrlとShiftを押しながらENTER 押しても、どうすればよいかわからず、 いろいろ試してカーソルを関数に持っていってやればできました。 取り急ぎ、このやり方しか試していません。(すみません。仕事しながらなのでご理解ください) でもそうすることで何が変わって計算ができるようになるのですか? ありがとうございます。 お時間がありましたら回答ください。

関連するQ&A

  • SUM((IF(MOD(ROWを使った計算の結果が違う

    エクセルで集計する表を作っています。XPでエクセル2003です。 4行おきのセルを集計する式を作ろうと思っています。 セルは2行分を一つに(A9とA10、A11とA12といったかたちで)結合させています。      A 9    2 10  11   5 12  13   2 14  15   4 16  17   3 18  19   4 20 のうち、A9、A13、A17の合計を出したく、 SUM((IF(MOD(ROW(A9:A16),4)=1,A9:A16))) と式をいれたところ、結果は20と全部の合計がでてしまいます。 どこがおかしいのかと思い、fx(関数挿入ボタン?)を押して確認するとそこでは数式の結果=7と求めていた結果が表示されているのです。 どこかがおかしいのでしょうが、私には全くわからず困っています。 どうしたら求めている答えがでる式になるのか教えていただけますでしょうか。おねがいします。

  • =MOD(ROW(),2)=0が一行置きになる意味

    初歩的な質問ですみません。 =MOD(ROW(),2)=0 について教えてください。 MODはあまりを返す関数、ROWが行を示す関数ということはわかるのですが、どうしてこの「=MOD(ROW(),2)=0」という数式が「一行置きに」を表すようになるのでしょうか? 「ROWの()で指定した範囲の行番号を2で割ったときの余りが0」ということだと思うのですが、これは「余りが0=偶数」だから「偶数行を指定する=一行置き」という理解であっていますか? また、( )の中を「,」で区切るのはどういう意味を持ちますか? 関数によって違うとも思いますが、「,」の前と後で、「前の数値に(を)後の数値を(で)」というかんじでしょうか?「IF」関数の場合「,」がいくつも続く時はどういう意味になりますか?

  • MOD(ROW(),2)=0を教えて

    基本的なことですみません。 MOD(ROW(),2)=0の日本語訳?は 行を2で割った余りが0の行でよいでしょうか? また、このときのROW()の()の意味がわかりません。 ROW全てと訳して()で特定しない、という意味でしょうか? 追伸:この処理での結果は一応理解しておりますが、日本語訳がわからないので原理をしりたいのです。

  • エクセル2007で、1行飛ばしの合計を出す方法

    エクセル2007を使用しています。 例えば、A1からA100までの奇数行の合計をA101に、偶数行の合計をA102に求めたい時、 奇数行は、=SUM(IF(MOD(ROW(A1:A100),2)=1,A1:A100,0)) 偶数行は、=SUM(IF(MOD(ROW(A1:A100),2)=0,A1:A100,0)) と入れればいいと思うのですが、これは、手入力するしかないのでしょうか? 私は、コピペして数字だけ書き換えていますが、もっと簡単な方法はありませんか? 独学ですので、間違っているところがあるかと思います。 容赦なく、ご指摘ください。 よろしくお願いいたします。

  • 1行ごとに合計する

    エクセルの表内で1行ごとに合計を出したいです。 行内に空白(VLOOK入り関数)と#N/Aと表示されている行があるためか =SUM(IF(MOD(ROW(A1:A20),2)=1,A1:A20,0)) といった関数を使っても上手く合計ができません。 何かよい方法(関数)はないでしょうか?

  • ROW関数について

    先日質問をしたのですが、理解が足りないようなので質問させて頂きます。 ROW関数はセルを入力したそのセルの行番号を返すものだと思うのですが、例えば =INDEX(シート1!C2:シート1!HR2,(ROW()-3)*3+1,) このような数式をワークシート2のD3のセルに入れると、ROW()は3と解釈されるので、 ・範囲はData!のワークシートのC2からHR2まで、 ・(3-3)*1+1となるので、その範囲内の1番であるData!D2セルを参照するのだと思うのですが、何か間違っているでしょうか? この際に、ROW()に参照されるセルは、もしかしてシート1のものなのでしょうか? 宜しくお願いしますm(_ _)m

  • EXCEL N行おきの集計が正しくできない

    販売管理用に計算書を作成しています。 1行目 20000(実績) 2行目 15000(予定) 3行目 -5000(前月比) のような以下組み合わせが200あります。 以前の質問やMicrosoftのサイトHttp://support.microsoft.com/default.aspx?scid=kb;ja;402181 を参考にして、1行目の集計を出すセルに =SUM(IF(MOD(ROW(I4:I603),3)=MOD(ROW(I4),3),I4:I603))を入力しました。 =をクリックして計算式を確認すると、手計算で確認した数と集計数は一致しているのですが、セルに表示される合計値には(予定)+(実績)が計算されて表示されてします。 原因と対処方法を教えていただければ幸いです。 よろしくお願いいたします。

  • 配列数式って何ですか??

    きのうは、ある列において偶数行だけの合計を求めたいときの計算式を教えてもらいました。 数式は以下のようになるそうです。 {=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} (ありがとうございました。) しかし、そこで出てきた「配列数式」というものが何なのか分かりません。上では{}でくくられた部分だという事はわかるのですが、どうして一番初めと終わりに{}があるのか、たとえば比較として、上において{}がない数式ではどのような計算がされてしまうのでしょうか。 また、{}の位置がSUMの後にあるとき、 =SUM{(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} なんかはどんな計算をしていることになるのでしょうか。 配列数式の計算手順がイメージできないのです。 どなたか教えて下さい。

  • Excelの式について質問です。

    Excelで勤怠管理表を作っているのですが、    A B C D…AE 1   1 2 3 4…31 (←日付) 2 3 -----中略------ 76  2 6 2 4…8 (←その日ごとの予定勤務時間合計) 77  3 8 4 5…5 (←その日ごとの実際勤務時間合計) 1列には「2008/10/01」といった形式で日付が入力されています。 TODAY関数を利用して、 たとえば今日が3日の場合、76列の合計が10(2+6+2)に、 今日が4日の場合は、14(2+6+2+4)になるような式を作りたいのですが、 いい方法はありますでしょうか。 ※必要かはわかりませんが、念のため作成中のExcelの詳細を書いておきます。 2列目には曜日が入っています。 3~5列目は予備の空欄です。 6~74列目の偶数行には各スタッフの予定勤務時間、 7~75列目の奇数行には各スタッフの実際勤務時間が入力されており、 76列目は「=SUM(IF(MOD(ROW(A6:A75)+1,2)=1,A6:A75))」で偶数行の合計を、 77列目は「=SUM(IF(MOD(ROW(A6:A75),2)=1,A6:A75))」で奇数行の行の合計を出しています。

  • 1行おきのセルの合計数式結果が0になってしまいます。エクセル

    1行おきのセルの合計数式結果が0になってしまいます。エクセル データ範囲がE2からU117あり、E列のE2から1行おきに数値E116までを合計するため E118に次の数式を入力しました。 =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117)) Ctrl+Shift+Enterすると結果が0になってしまいます。 指定の行には数値以外に「-(ハイフン)」や、範囲行に数式が入っていたりするからでしょうか?   E 2   50  ←足したい 3  数式 4   -  ←足したい 5  数式 ・     ・ 117  150  ←足したい 118  数式 119  =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117))

専門家に質問してみよう