• ベストアンサー

応用した計算式を教えて欲しいです。

皆さん、すいません、1つ下ぐらいに質問した者ですが、 基本の計算式を教えてもらったのですが、応用した計算式ができず 困っていまして、できましたらもう一度ご教授ください。 Aの1~3000までのセルの中に ランダムなプラスの数字、ランダムなマイナスの数字が縦にランダムに並んでます。 (例えば、0.54、0.15、0.3、0.015などが連続で並んでいたり、-0.57、-0.01、-0.25が連続で並んでいたり、0.25が1回だったり、-1.2が2回連続だったり、0があったり、等々) ※0も出現するので、その時はプラスマイナスゼロ扱いでお願いします。 0.54 0.15 0.3 0 0.015 -0.57 -0.01 -0.25 0.25 0 -1.2 -1.2 0 -1.2 その時に、 プラスの数字が並んでいる数の合計、 マイナスの数字が並んでいる数の合計、 を隣のセル(どこでもいいです)に出したいのですが、 この計算式のやり方がわかりません。。。 上記の例なら、下記のような答えになるはずなんです。 1.005 -0.83 0.25 -3.6 皆さんよろしくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

作業列を使って行います。 B1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(ROW(A1)=1,IF(OR(AND(A1>=0,A2>=0),AND(A1<=0,A2<=0)),A1,""),IF(OR(AND(OFFSET(B1,-1,0)>=0,A1>=0),AND(OFFSET(B1,-1,0)<=0,A1<=0)),OFFSET(B1,-1,0)+A1,IF(OR(AND(OFFSET(B1,-1,0)>=0,A1<=0),AND(OFFSET(B1,-1,0)<=0,A1>=0)),A1,"")))) C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(AND(B1>=0,B2<=0),AND(B1<=0,B2>=0)),B1,"") D1セルには次の式を使って下方にオートフィルドラッグします。 =IF(C1="","",ROW(A1)) E1セルには次の式を使って下方にオートフィルドラッグします。 =IF(ROW(A1)>COUNT(D:D),"",INDEX(C:C,SMALL(D:D,ROW(A1)))) E列に答えが表示されます。

yuna_20
質問者

お礼

KURUMITOさん、回答ありがとうございます。 (お礼が遅くなってすいません) シンプルかつわかりやすく、答えも完璧で、 すぐに使えることができました! まさに理想としていたものです。 感謝感謝です!ありがとうございました!

その他の回答 (6)

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

作業列を使ってやる方法。 例データ(質問のデータに少し増やした) A列  B列  C列 (第1行は空白にすること) 0.54 1 1 0.15 1 1 0.3 1 1 0 1 1 0.015 1 1 -0.57 -1 2 -0.01 -1 2 -0.25 -1 2 0.25 1 3 0 1 3 0 1 3 -1.2 -1 4 -1.2 -1 4 0 -1 4 -1.2 -1 4 0 -1 4 0 -1 4 -2 -1 4 23 1 5 B2には =IF(A2=0,B1,SIGN(A2)) 下方向に式を複写。 C2には =IF(B1=B2,C1,C1+1) 下方向に式を複写。 === (必須ではないが判りやすくするため)A列をD列に移動して データー集計でC列を元にD列を集計する グループの基準 C列 集計するフィールド D列 結果 C列  D列 1 0.54 1 0.15 1 0.3 1 0 1 0.015 1 合計 1.005 2 -0.57 2 -0.01 2 -0.25 2 合計 -0.83 3 0.25 3 0 3 0 3 合計 0.25 4 -1.2 4 -1.2 4 0 4 -1.2 4 0 4 0 4 -2 4 合計 -5.6 5 23 5 合計 23 総計 17.825

yuna_20
質問者

お礼

imogasiさん、またもや回答ありがとうございます。 なるほどなるほどです、こういう風なやり方も、 と思いながら、試しています。 とても参考になり、是非使わせてもらいます。 色んなやり方があるんだ、Excel、奥が深いなぁって思いつつ、 imogasiさん筆頭に、皆さんの知識の深さにも感服しています。 ありがとうございました!

回答No.6

基本的には日ごとの小計を出すのと同じ、データ列の自行までの小 計から小計列の直前行までの小計を引く話。符号の変動はsign関数 で補足出来るんだけど、ゼロを無視するにはどうすればいいかが、 頭の使いどころですね。 実はゼロが連続しない条件があれば作業列なしで簡単に出来るんで すが、そういうわけにもいかないでしょうから作業列を使います。 B1: =if(A1,sign(A1),B2) 「データ列がゼロでないなら符号を出す。ゼロなら下行に同じ」 これで準備ができたので、普通に小計を出します。 c1: =IF(A1*(B1<>B2),SUM(A$1:A1),"") C2: =if(A2*(B2<>B3),sum(A$1:A2)-sum(C$1:C1),"") 「作業列が下行で変わる場合、データ列の累計から直前の小計まで の累計を引く」 シンプルでしょ。

yuna_20
質問者

お礼

grumpy_the_dwarfさん、回答ありがとうございます。 (お礼が遅くなってすいません) なるほどです!とてもシンプルでわかりやすく 答えも完璧にでます。使わせてもらいます! ありがとうございました!感謝です。

回答No.5

もう一案 D2セル =A2 D3セル =IF(SIGN(A3)=SIGN(D2),SUM(A3,D2),IF(A3=0,D2,A3)) 下へオートフィル E1セル 1 E2セル =IF(SIGN(D2)=SIGN(D3),E1,SUM(E1,1)) F1セル =MAX(E:E) F2セル =IF($F$1>ROW()-1,ROW()-1,"") G2セル =IF(F2="","",INDEX(D:D,MATCH(F2,E:E)+1)) E2:G2セル範囲を下へオートフィル 符号の判定は #3のtom04さんの方法の方がわかりやすいかも。 参考まで

yuna_20
質問者

お礼

CoalTarさん、回答ありがとうございます。 (お礼が遅くなってすいません) 参考にします。ありがとうございました!

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

こんにちは! 無理矢理関数での方法になります。 今回の質問の場合は「0」が邪魔をしているみたいなので ↓の画像のようにA列のデータにフィルタをかけ オートフィルタのオプションで「0」以外を表示させ、 それを形式を選択して貼り付けで「値」にチェックを入れC列に貼り付けたものを利用しています。 D2セルは単純に =C2 D3セルは =IF(C3="","",IF(C3*C2>0,D2+C3,C3)) として、フィルハンドルの(+)マークでダブルクリック E2セルに =IF(D3="",D2,IF(D3*D2>0,"",D2)) とし、これもフィルハンドルでダブルクリック 最後にG2セルの数式は配列数式になりますが、 =IF(COUNT($E$2:$E$3000)<ROW(A1),"",INDEX($E$2:$E$3000,SMALL(IF($E$2:$E$3000<>"",ROW($1:$2999)),ROW(A1)))) (これをShift+Ctrl+Enterキーで確定してください。) と入れて、オートフィルで下へコピーしています。 これで何とか希望に近い形にならないでしょうか? 以上、かなり強引な方法ですが、 参考になれば幸いです。m(__)m

yuna_20
質問者

お礼

tom04さん、回答ありがとうございます。 (お礼が遅くなってすいません) 画像付きで、わかりやすく説明もして頂き、ありがとうございます。 凄く参考になり、使わせてもらいます。 本当にありがとうございました!

noname#99913
noname#99913
回答No.2

関数でやると大変そうなので、マクロで作りました。B列に合計を出します。空白セルが出現するまで、計算を続けます。試してみてください。 Option Explicit Private Sub GetTotal() Dim Total As Single Dim i As Integer i = 1 Do While Cells(i, 1) <> "" Total = Total + Cells(i, 1).Value Cells(i, 2).Value = "" If Total * Cells(i + 1, 1).Value < 0 Or Cells(i + 1, 1) = "" Then Cells(i, 2).Value = Total Total = 0 End If i = i + 1 Loop End Sub

yuna_20
質問者

お礼

kozirou54さん、回答ありがとうございます。 (お礼が遅くなってすいません) マクロ使わせてもらいます!感謝です。 ありがとうございました!

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

もっと条件を詳しく文章で書かないと。推測させるないように。質問者自身が条件を整理できて無いのでは。 並ぶとは、 プラス、0、マイナスの符号の変化を捉えるようだ。 プラスの次ー>プラス プラスの次ー>0 0の次ー>プラス マイナスの次ー>マイナス マイナスのの次ー>0 0の次ー>マイナス ーーー そして愚豪的な、「連」ごとの合計を出すのか。 ーー 関数では作業列を使うのが判りやすい式になるだろう ーーー 一見してVBAでやるのが適しているようだ。 例データ A列   B列(参考小計) 0.54 0.15 0.3 0 0.015 1.005 -0.57 -0.01 -0.25 -0.83 0.25 0 -1.2 -1.2 0 -1.2 -3.6 ーーー コード  標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row 'MsgBox d k = 1 '書きだし最初行。第1行とする t = Cells(1, "A") 'とりあえず合計に加算 m = Sgn(Cells(1, "A")) '第1行目の符号をセット '-- For i = 2 To d If Cells(i, "A") <> 0 Then '0だと何もしない。符号も継承 If Sgn(Cells(i, "A")) = m Then '符号が前と直前と同じなら t = t + Cells(i, "A") '同じなら足すだけ。符号継承 Else Cells(k, "F") = t '前行までの合計書き出し k = k + 1 '一行下へ書き出す準備 t = 0 'ご破算 t = t + Cells(i, "A") '合計に加算 m = Sgn(Cells(i, "A")) '符号を変える End If End If Next i Cells(k, "F") = t '最後の書き出し End Sub ーー 結果F列 1.005 -0.83 0.25 -3.6

yuna_20
質問者

お礼

imogasiさん、回答ありがとうございます。 (お礼が遅くなってすいません) >もっと条件を詳しく文章で書かないと。推測させるないように。質問者自身が条件を整理できて無いのでは。 本当にその通りです、基本さえ教えてもらえれば、後は自分で改良してできる!と思ったばっかりに、二度手間三度手間になり、皆さんにご迷惑をおかけしてしまって、、すいませんでした。 注意だけじゃなく、とても参考になる答えも出して頂き、 ありがとうございました!

関連するQ&A

  • 計算式を教えて欲しいです。

    ↓質問1↓ Aの1~3000までのセルの中に 1というプラスの数字、-1というマイナスの数字が縦にランダムに並んでます。 (例えば、1が7回連続で並んでいたり、-1が5回連続で並んでいたり、1が1回だったり、-1が3回連続だったり、等々) 1 1 1 -1 -1 1 1 -1 1 1 1 -1 -1 -1 その時に、 1が連続で並んでいる数の合計、 -1が連続で並んでいる数の合計、 をB1のセルに出したいのですが、 この計算式のやり方がわかりません。。。 上記の例なら、下記のような答えになるはずなんです。 3 -2 2 -1 3 -3 みなさんよろしくお願いします。

  • 計算式を2つ教えて欲しいです。

    ↓質問1↓ Aの1~3000までのセルの中に 1と2という数字が縦にランダムに並んでます。 (1が7回連続で並んでいたり、2が5回連続で並んでいたり、1が1回だったり等々) その時に、 1は平均、何回連続で並んでいることが最も多いのか 2は平均、何回連続で並んでいることが最も多いのか 1は最大、何回連続で並んでいることがあるか、 1は最小、何回連続で並んでいることがあるか、 この計算式のやり方がわかりません。。。 ↓質問2↓ あと、上記の通り、Aのセル1~3000まで 1と2という数字が縦にランダムに並んであるが、 連続回数やパターンからして、次に新しく出るとしたら、 1と2、どちらの確率が高いか、パーセンテージで出る 計算式があれば、教えてほしいです。 みなさんよろしくお願いします。

  • エクセルの計算式でオートサムで単純にセルの合計を計算表示したいのですが

    エクセルの計算式でオートサムで単純にセルの合計を計算表示したいのですが マイナスの数字もプラスと認識して合計表示する方法教えて下さい

  • エクセルの計算式で質問です

    エクセルで連勝連敗数を計算し、それぞれの合計額を計算する方法を教えて下さい。 セルA列に,以下のように数値が並んでいます。マイナス値は負け、プラス値は勝ちです。この列で最大連敗数と最大連勝数を計算し、其々の連敗時、連勝時の合計額も同時に計算できる方法をご存知なら教えて下さい。 A列 ¥14,000 ¥6,000 ¥1,000 ¥-11,000 ¥21,000 ¥-10,000 ¥20,000 ¥-3,000 ¥-11,000 ¥-13,000 ¥-17,000 ¥-36,000 ¥9,000 ¥5,000 ¥21,000

  • エクセルのプラスマイナスのトータル計算

    トータルの列のセルの合計を求める時、マイナスの部分とプラスの部分があるのですが、Σを押すとプラスマイナス全部あわせた合計がでて、プラスの部分の合計と、マイナスの部分の合計をそれぞれ出したい場合はどうすればよいのでしょうか? よろしくお願いします。

  • エクセルの計算式を教えて下さい

    エクセルで報酬の控除計算をしているのですが、 例)=(A-5000)*10% 上記で計算式をだすと控除の計算はできるのですが セルが何も無いところですと-500円とでてしまいます この何も無いところのー500円をなくす計算式、方法を教えて頂けたら助かります。 もし出来ないなら、Σの計算でマイナスだけをはぶき プラスだけの合計を出す方法を教えて下さい

  • エクセルで偶数のみの数字の合計を計算

    LOT6のデータをエクセル2000に保存して有ります。 かなりの行数が有りますが、これを一括で偶数のみの合計数を計算したいのです。 例えば           B1 C1 D1 E1 F1 G1 H1  I1(偶数合計) 1回目(1行)  10  13  18  23  33  38  17   3 上記のように7個数字が有った時、「I1」のセルに計算式で偶数のみの合計数を3と成る数式を教えて頂きたくお願い致します。 奇数は偶数を計算した時、7-(偶数の合計数字)を引いて、後は計算式をドラッグしてコピーします。 以上宜しくお願い致します。

  • 同一セル内に数字・文字がある場合の計算式

    同一セル内に数字・文字がある場合の計算式 エクセルにおける表計算で困っています。 表計算をする場合、通常はセル内に数字のみを入力し合計値を求めてました。 例:100+100 合計200 しかし、同一セル内に文字が入ってきた場合は、合計値を求めても計算ができません。 例:100円+100円 合計0 セル数が少なければ電卓でも出来ますが、多い場合や平均値を求める場合に効率が悪くなります。 セル内の文字を読み取ることなく、数字データだけ読み取る方法はありますか?

  • まとめて計算式を設定したい

    WinXPでエクセル2003を使用しています。 例えばC1からC100までのセルの中に 整数だけ入っている状態で(数はランダム) その全てのセルに「セルの数字÷13.5」 というように、範囲内にまとめて「÷13.5」という 計算式を付加したい場合、良い方法はありますか。 よろしくお願いします。

  • エクセルの表計算

    皆様よろしくお願いします。エクセルで表計算(単純な足し算)を しています。セルに数字を入れると 合計が、でるものです。いままで 何もなかったのですが、なぜか今月に入ってから 合計が、出なくなってしまいました。数式が、消えてしまったのかと思って、合計欄を見ると 合計のところには、数式は入っていました。それからそのシートは、セルに数字を入れて、合計欄に再度数式を入れないと 計算しなくなりました。なぜでしょうか・・。

専門家に質問してみよう