• ベストアンサー

エクセル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)) と入れればいいと思うのですが、これは、手入力するしかないのでしょうか? 私は、コピペして数字だけ書き換えていますが、もっと簡単な方法はありませんか? 独学ですので、間違っているところがあるかと思います。 容赦なく、ご指摘ください。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.7

#4、#5です >私は、コピペして数字だけ書き換えていますが、もっと簡単な方法はありませんか? 「奇数行/偶数行の判定に使われている 1と0を書き換えている」 そのように読み取りました。文章の流れから大半の方はそのように読み取るでしょう。 >「その他の関数」には、=SUMPRODUCTという関数はありませんよね? 「数学/三角」で探してみましょう。 「関数の挿入」ボタンでダイアログボックスを出し、「分類:すべて表示」にもあります。 >表がA50までで、合計を出したいセルがA49とA50の時は、自動でA49とA50まで計算してくれるのでしょうか? ということは、セル参照の部分を自動で変更したいってこと? この説明では、循環参照となってしまう。 A1:A48セルが計算対象として A49セルに =SUMPRODUCT(MOD(ROW(A$1:INDEX(A:A,ROW()-2)),2),A1:INDEX(A1:A65534,ROW()-2)) (奇数行の計)の条件は、 1. A列の計算対象範囲の直下に入力すること。 2. 奇数行に入力すること。 偶数行は奇数行の計をオートフィルでコピーする。 >この数式をすぐ呼び出せるように保存しておく方法はありますでしょうか? MS-IME で単語登録かなあ。あまり長いものはできないようですので、 あとは、個人用マクロのブックに保存して使うとか。。。 そのようなことをしないので良いと思われる方法が浮かびません。

googooganmo-goo
質問者

お礼

>>「奇数行/偶数行の判定に使われている 1と0を書き換えている」 >>そのように読み取りました。文章の流れから大半の方はそのように読み取るでしょう。 セル範囲や「1」、「0」の数字を書き換えてます。 みなさんの回答を読んでいると、私には今までの方法が一番簡単なような気がしてきました。 でも、教えていただいたことを試してみます。 いろいろと、ありがとうございました。勉強になりました。

その他の回答 (8)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.9

VBAでユーザー定義関数でいいなら Function SUMODD(RG As Range) '1列の奇数行を集計する For Each Ri In RG If Ri.Row Mod 2 = 1 And IsNumeric(Ri) Then SUMODD = SUMODD + Ri End If Next Ri End Function Function SUMEVEN(RG As Range) '1列の偶数行を集計する For Each Ri In RG If Ri.Row Mod 2 = 0 And IsNumeric(Ri) Then SUMEVEN = SUMEVEN + Ri End If Next Ri End Function Function SUMOE(RG As Range, LN As Integer) '1列で集計行が奇数か偶数かを指定させる。指定がない場合は奇数行 If IsNumeric(LN) Then Li = LN Mod 2 Else Li = 1 End If For Each Ri In RG If Ri.Row Mod 2 = Li And IsNumeric(Ri) Then SUMOE = SUMOE + Ri End If Next Ri End Function 上記をVisualBasicEditerで標準モジュールにモジュールを挿入して保存すれば 奇数行=SUMODD(A1:A100) 偶数行=SUMEVEN(A1:A100) または 奇数行=SUMOE(A1:A100,1) 偶数行=SUMOE(A1:A100,2) で計算できます。

  • rolly-ys
  • ベストアンサー率43% (25/57)
回答No.8

>=SUMPRODUCT((MOD(ROW(A1:A100),2)=1)*A1:A100) >「その他の関数」には、=SUMPRODUCTという関数はありませんよね? SUMPRODUCT関数は「その他の関数」ではなく「数学/三角」ですよ。 >コピペして数字だけ書き換えていますが、 コピペするなら、範囲は絶対参照にしなければいけませんね。 そして「=1」「=0」の部分も手入力にしたくなければ A101を、=SUMPRODUCT((MOD(ROW($A$1:$A$100),2)=MOD(ROW(),2)*$A$1:$A$100) にすれば、A102はA101をオートフィルコピーすればいいです。

googooganmo-goo
質問者

補足

ありがとうございます。 A1~A100と入れた場合、合計を出すセルがA51でも問題なく計算してくれるのでしょうか?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.2です! >「その他の関数」の中には、ありませんので・・・ とありましたが、SUMPRODUCT関数はその他の関数の中にあります。 当方使用のExcel2003の場合です。 数式バーの左にあるfxのアイコンをクリックすると「関数の挿入」ダイアログボックスが出ますので 関数の分類で「すべて表示」を選択 → 関数名のどこでも良いので一度クリック → 「S」キーを押してください。 「S」から始まる関数が出ますので、下の方にあるはずです。 そこでSUMPRODUCT関数を選択し、関数の引数ダイアログで「配列1」の欄に数式を入力していきます。 「(」や「*」「ROW(○○)」等は自分で入力します。 それから前回の数式をA101セル・A102セルに入力しておくと空白セルは無視されて 入力してあるセルだけの合計が表示されますので、データがA100までなくても構いません。 尚、途中に文字列があるとエラーになります。 って・・・今この文章を入力中に、ふと思ったのですが、 もしデータのすぐ下の行(仮にA50までしかデータがなければA51セルに奇数・A52セル)に 奇数・偶数の合計を表示したいのであれば、関数では対応できないと思います。 もしそちらをご希望であれば、無理やりって感じのVBAになりますが、 画面の左下にあるSheet見出しの操作したいSheet名上で右クリック → コードの表示 白い画面が出ますので、↓のコードをコピー&ペーストしてマクロを実行してみてください。 データのすぐ下に奇数行の合計・その下に偶数行の合計が表示されると思います。 (データは1行目からあるとしています。) Sub test() '←この行から Columns(1).Insert Dim i, j, k As Long k = Cells(Rows.Count, 2).End(xlUp).Row For i = 1 To k Step 2 For j = 2 To k Step 2 Cells(i, 1) = 1 Cells(j, 1) = 2 Cells(k + 1, 2) = WorksheetFunction.SumIf(Range(Cells(1, 1), Cells(k, 1)), 1, _ Range(Cells(1, 2), Cells(k, 2))) Cells(k + 2, 2) = WorksheetFunction.SumIf(Range(Cells(1, 1), Cells(k, 1)), 2, _ Range(Cells(1, 2), Cells(k, 2))) Next j Next i Columns(1).Delete (xlToLeft) End Sub '←この行まで 以上、長々と書きましたが 的外れならごめんなさいね。m(__)m

googooganmo-goo
質問者

お礼

ありがとうございます。 忙しくて、お礼が遅くなり申し訳ありません。 fxの中にありました。右のΣしか見ていなくて・・・ 素人でしかも初心者ですので、皆さんの回答を理解するのに時間がかかってしまいます。 皆さんの回答を試してみます。 いろいろと教えていただき、ありがとうございました。

回答No.5

#4です。もう一捻り。 =SUMPRODUCT(MOD(ROW(A$1:A$99),2),A1:A99)

回答No.4

>奇数行の合計をA101に >奇数行は、=SUM(IF(MOD(ROW(A1:A100),2)=1,A1:A100,0)) 偶数行は、=SUM(A1:A100)-A101 で計算速度は速くなるとは思いますが、A102セルに入力する速度は遅いですね 奇数行 =SUMPRODUCT((MOD(ROW(A$1:A$99),2)=1)*1,A1:A99) ならオートフィルでコピーが簡単かな。 対象範囲に数値(または空白セル)しかないなら =SUMPRODUCT((MOD(ROW(A$1:A$99),2)=1)*A1:A99) でもOK

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

上記で1,0の入替が面倒というなら、別セルを参照するしかありませんけど... A101=SUM(IF(MOD(ROW($A$1:$A$100),2)=$B101,$A$1:$A$100,0)) B101=1 このA101を下の行にコピー後にB102=0とする。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。当方使用のExcel2003の場合ですが、 A1~A100セルの奇数行の合計は =SUMPRODUCT((MOD(ROW(A1:A100),2)=1)*(A1:A100)) 偶数行の合計は =SUMPRODUCT((MOD(ROW(A1:A100),2)=0)*(A1:A100)) としてみてください。 考え方としては奇数行の場合、A1~A100セルの行番号を2で割った余りが「1」の行を合計 偶数行の場合はA1~A100セルの行番号を2で割った余りが「0」の行の合計としています。 (もし範囲が偶数行から始まる場合は余りの部分で調整してください) 参考になれば良いのですが・・・m(__)m

googooganmo-goo
質問者

お礼

ありがとございます。 =SUMPRODUCT((MOD(ROW(A1:A100),2)=1)*(A1:A100)) =SUMPRODUCT((MOD(ROW(A1:A100),2)=0)*(A1:A100)) これらは、自分で作るのでしょうか? 「その他の関数」の中には、ありませんので・・・ この数式をすぐ呼び出せるように保存しておく方法はありますでしょうか? 上の数式(範囲はA1:A100)を保存していた場合、 表がA50までで、合計を出したいセルがA49とA50の時は、自動でA49とA50まで計算してくれるのでしょうか? よろしくお願いいたします。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>私は、コピペして数字だけ書き換えていますが、もっと簡単な方法はありませんか? 数式を入力するときは、セル範囲や「1」、「0」の数字は手入力(または領域選択)するしかありません。 数式を一部変更するよりも、「もっと簡単な方法」とは具体的にどのようなことを指しているのでしょうか? たとえば配列数式をCtrl+Shift+Enterで確定しないでもよいという意味なら以下のような数式にしたほうが簡単かもしれません(データ範囲は適宜大きめに設定しておけば、そもそも数字を変更する必要はありません)。 =SUMPRODUCT((MOD(ROW(A1:A100),2)=1)*A1:A100)

googooganmo-goo
質問者

お礼

ありがとうございます。 =SUMPRODUCT((MOD(ROW(A1:A100),2)=1)*A1:A100) 「その他の関数」には、=SUMPRODUCTという関数はありませんよね? この数式は、自分で作っておくのでしょうか? また、この作った数式を「その他の関数」またはどこかに保存しておくことはできますか? よろしくお願いいたします。

関連するQ&A

専門家に質問してみよう