人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル2007について教えてください。
前回の質問に関連しますが、
A列に2値(例1、0)が不規則にデーターとして入力されています。
B列に1が連続している回数を、C列に0が連続している回数をカウント
させる方法を教えてください。関数、マクロどちらでも構いません。
やりたいことは、同じ値(データー)連続回数の発生頻度をグラフにして知りたいのです。
(例 1回が300回、2連続が200回?略?xx連続がn回という感じです)
イメージ図を添付いたします。イメージ図ではデーター数は15個になっていますが、
実際のデーター数は都度異なり、多くて大体5000件位になります。

すみませんがよろしくお願いいたします。

1333101356
●拡大する

●質問者: great_pessimist
●カテゴリ:コンピュータ 科学・統計資料
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● SALINGER
●50ポイント ベストアンサー

数式でやってみます。
作業列をD列としてD3に数式

=IF(A3<>A4,ROW()-1,D2)

B3に数式

=IF(A3=1,IF(D3=D2,"",D3-D2),"")

C3に数式

=IF(A3=0,IF(D3=D2,"",D3-D2),"")

を入れる。

B2とC2には直接、数値を入れる。これはA2が1でA3が0ならB2が1のように。
B3:D3を選択して右下をダブルクリックして5000行に数式を入れる。
最後に、最終行に入れる為にA5001セルにA5000が1なら0を0なら1を入れる。

追加。
出来上がったデータをカウントするには、例えばE1に

=COUNTIF(B:B,ROW())

F1に

=COUNTIF(C:C,ROW())

とすれば、各連続回数の頻度になるのでグラフ化できます。


great_pessimistさんのコメント
SALINGERさん グラフ化のことまで考慮してご回答していただいてありがとうございます。 すみません!恥ずかしながら私の理解力不足で以下の2点が理解できません。 ?「B2とC2には直接、数値を入れる。これはA2が1でA3が0ならB2が1のように。」 例えばA2?A5まで4連続で1、A6に初めて0が出てくる場合、 Q.B2とC2にはどの数値を入れればよいのでしょうか? ?「B3:D3を選択して右下をダブルクリックして5000行に数式を入れる。 最後に、最終行に入れる為にA5001セルにA5000が1なら0を0なら1を入れる。」 Q.5000行に入れる数式は何になるのでしょうか? せっかくご回答いただいたのに私の勘違い、理解力不足で申し訳ありません。m(_ _;)m

SALINGERさんのコメント
できるだけトリッキーなことをしないで、質問者側でも理解できるようなもので回答しようと思いましたが説明不足でしたね。 ?0か1が連続する場合は何も入らないので何も入れないでください。これは3行目以降の数式で使う初期値になります。 ?セルの右下をダブルクリックするとA列が5000行あれば5000行まで数式が自動的に入るはずです。ただし、A列の最後に一つ違う値を入れないとA列がそこで終わりということが判別されないので最終行の数式の値が入らないことを避ける為です。

great_pessimistさんのコメント
SALINGERさん 追加の説明をいただき、ありがとうございました。 説明不足というより私の理解力不足でした。 お手数おかけしました。

2 ● きゃづみぃ
●50ポイント

マクロで 一発で 出せます。

Sub test()
b = Cells(2, "A")
c = 1
'数値は 多くて5000個ということなので 最大 5000にしてあります。
For a = 3 To 5000
 If Cells(a, "A") = "" Then
 If b = "1" Then
 Cells(a - 1, "B") = c
 Else
 Cells(a - 1, "C") = c
 End If
 Exit For
 End If
 
 If Cells(a, "A") = b Then
 c = c + 1
 Else
 If b = "1" Then
 Cells(a - 1, "B") = c
 Else
 Cells(a - 1, "C") = c
 End If
 b = Cells(a, "A")
 c = 1
 End If
Next a

End Sub

great_pessimistさんのコメント
takntさん ご回答いただきありがとうございました。 出来ました!

3 ● うぃんど
●50ポイント

作業列を使ったほうが効率良いとは思うのですが、あえて作業列無しにしてみました

B2とC2にそれぞれ下記の式を入れて下方向コピーするだけ

B2の式
=IF(AND(A2=1,A3<>1),COUNTIF(INDIRECT("A2:A"&ROW()),1)-SUM(INDIRECT("B1:B"&(ROW()-1)),0),"")
C2の式
=IF(AND(A2=0,A3<>0),COUNTIF(INDIRECT("A2:A"&ROW()),0)-SUM(INDIRECT("C1:C"&(ROW()-1)),0),"")

great_pessimistさんのコメント
windofjulyさん 前回に引き続きご回答いただきありがとうございました。 出来ました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ