dポイントプレゼントキャンペーン実施中!

 初めまして、よろしくお願いします。
EからLまで得点が入っています。Eからプラスが続いた数をAへ、マイナスが続いた場合はBへ表示できるような関数式のやり方がを教えていただきたく。お願いします。

例)
  A  B  C  D  E  F  G  H  I  J  K  L
1 5           1  2  3  4   5  -1  2  3
2 1           3 -1  2  3   2  -1 -1  -2
4   3         -1 -2  -3  4  -1  -1 -1 -2
5   1         -3  3  4  5  4   4  5  3

A 回答 (7件)

[No.1この回答へのお礼]へのコメント、



》 A列のみに、連続プラスならばプラスの数字、連続(マイ
》 ナス)ならばマイナス数字で表示できれるやり方を…

1.セル A1 に次の“ユーザー定義”書式を設定
   +0;-0;
2.セル A1 に次の配列数式を入力して、此れを下方にズズーッとドラッグ&ペースト
   {=IF(E1>0,MATCH(FALSE,E1:L1>0,0)-1,IF(E1<0,-(MATCH(TRUE,E1:L1>0,0)-1),""))}
「エクセル、連勝、連敗をカウントする関数式」の回答画像3
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。図まで貼り付けていただき、うまくできるはずなのですが、なぜか#N/Aエラーがでてしまいます。回答1ではマイナスは正しく表示されるのですが、プラスでは同じように#N/Aです。なぜなのか解りません。?????たぶん使用しているエクセルが2000と古いためのようです。

お礼日時:2011/01/03 12:07

連を数えるのはエクセル関数は苦手のように思う。


其れでVBAでやってみた。
どれだけ(何回)各人が勝ちや負けが込んだ(続いた)のか、見る表になっていると思う。
内容はE-L列で、プラス数とマイナスの連続スパン数の大きいものを計算してA,B列に挙げている。
例データ
A1:L4 なお-は左寄せ表示防止のためいれたもの。本当は空白セルです
51--12345-123
33--3-1232-1-1-2
14---1-2-34-1-1-1-2
71---33454453
標準モジュールに
Sub test01()
d = Range("E65536").End(xlUp).Row
For i = 1 To d
pmax = 0
mmax = 0
If Cells(i, "E") >= 0 Then 'E列について
maesgn = "p"
p = 1
m = 0
Else
maesgn = "m"
p = 0
m = 1
End If
'--
For j = 6 To 12 'F列からL列へ
Select Case maesgn
Case "p"
If Cells(i, j) >= 0 Then
p = p + 1
Else
maesgn = "m"
pmax = WorksheetFunction.Max(pmax, p)
p = 0
m = 1
End If
'--
Case "m"
If Cells(i, j) < 0 Then
m = m + 1
Else
maesgn = "p"
mmax = WorksheetFunction.Max(mmax, m)
p = 1
m = 0
End If
End Select
Next j
pmax = WorksheetFunction.Max(pmax, p)
Cells(i, "A") = pmax
mmax = WorksheetFunction.Max(mmax, m)
Cells(i, "B") = mmax
Next i
End Sub
p、mはそのときのプラスとマイナスの続き数、反転すると0にする。
pmax,mmaxはそれぞれの反転時間でのプラスとマイナス数の続き数
ーーーー
結果は上記A,B列
A列はプラスの連続の最大の連続スパン
B列はマイナスの数の最大の連続スパン
例えば2行目は
プラスは

232
の続きがあり、多いほうの数3
マイナスは
-1
-1-1-2
の多いほうの3
のように考えた。
ーー
問題の主旨を誤解していたら無視してください。
ただその場合は質問表現に問題あると思うが。
関数では相当難しいとおもったので。関数式では初心者中級者には理解が難しい式の組み合わせになりがちだから。
VBAでは考え付きやすいロジックで、それを素直にコードにしただけ(でもこちらも初心者は無理でVBAやプログラムの慣れがいると思うが)
もっと簡単な少ない行数のコードもあるかもしれないが。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。VBAでのやり方、参考にさせていただきたいと思います。

お礼日時:2011/01/03 16:24

[No.3この回答へのお礼]へのコメント、



》 たぶん使用しているエクセルが2000と古いためのようです。

なぜそう思うのか理解できません。
私の Excel 2002、2000、97 では全く問題ありません。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。回答内容のように、まったくこちらの勘違いのようでした。大変失礼しました。

お礼日時:2011/01/03 16:21

E列からL列まで数字があるとして


A1:
=SIGN(E1)*MATCH(-1,SIGN(E1:K1*F1:L1),0)
をCtrl+Shift+Enterしてみるなど。
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。マイナスでの連敗数はきちんと出ましたが、なぜだかこの式でもプラスではエラー表示されてしまいます。こちらのエクセルの設定に何か問題があるのかもしれません。参考にさせていただきたいと思います。

お礼日時:2011/01/03 16:26

こんにちは!


横からお邪魔します。

No.1さんの補足に
>A列のみに、連続プラスならばプラスの数字、連続ならばマイナス数字で表示できれるやり方を加えて教えていただければ幸いです。

とありますので・・・

A1セルに
=IF(E1="","",IF(E1>0,MIN(IF(E1:L1<0,COLUMN(A:H)))-1,-(MIN(IF(E1:L1>0,COLUMN(A:H)))-1)))
これは配列数式になってしまいますので、
この画面からA1セルにコピー&ペーストした後に、数式バー内で一度クリックします。
編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。

このA1セルをオートフィルで下へコピーではどうでしょうか?

以上、参考になれば良いのですが・・・m(__)m
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。うまくできないのはどうも古いエクセルのようです。比較的新しいエクセルで試してみたところ、うまくいきました。補足の気遣い、ありがとうございます。

お礼日時:2011/01/03 12:10

配列数式に依らない方法(添付図参照)



1.セル P1 に式 =E1>0 を入力
2.セル P1 を右方に(セル W1 まで)ズズーッとドラッグ&ペースト
3.セル N1 に式 =MATCH(FALSE,P1:W1,0) を入力
4.セル O1 に式 =MATCH(TRUE,P1:W1,0) を入力
5.範囲 N1:W1 を下方にズズーッとドラッグ&ペースト
6.セル A1 に式 =IF(E1>0,N1-1,"") を入力
7.セル B1 に式 =IF(E1<0,O1-1,"") を入力
8.範囲 A1:B1 を下方にズズーッとドラッグ&ペースト
「エクセル、連勝、連敗をカウントする関数式」の回答画像2
    • good
    • 0
この回答へのお礼

 回答ありがとうございます。参考にさせていただきたいと思います。

お礼日時:2011/01/03 10:50

A1: {=IF(E1>0,MATCH(FALSE,E1:L1>0,0)-1,"")}


B1: {=IF(E1<0,MATCH(TRUE,E1:L1>0,0)-1,"")}
    • good
    • 0
この回答へのお礼

B1の関数式はうまくできましたが、A1の関数式はうまくできませんでした。今回の質問でA1とB1で+、-を分けましたが、A列のみに、連続プラスならばプラスの数字、連続ならばマイナス数字で表示できれるやり方を加えて教えていただければ幸いです。 回答ありがとうございました。

お礼日時:2011/01/03 10:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!