1333101356 エクセル2007について教えてください。

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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/03/30 18:56:00
  • 終了:2012/04/05 21:27:09

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692012/03/30 20:59:28

ポイント50pt

数式でやってみます。
作業列を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())

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

他1件のコメントを見る
id:SALINGER

できるだけトリッキーなことをしないで、質問者側でも理解できるようなもので回答しようと思いましたが説明不足でしたね。

①0か1が連続する場合は何も入らないので何も入れないでください。これは3行目以降の数式で使う初期値になります。

②セルの右下をダブルクリックするとA列が5000行あれば5000行まで数式が自動的に入るはずです。ただし、A列の最後に一つ違う値を入れないとA列がそこで終わりということが判別されないので最終行の数式の値が入らないことを避ける為です。

2012/04/03 00:59:18
id:great_pessimist

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

2012/04/05 21:19:57

その他の回答(2件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692012/03/30 20:59:28ここでベストアンサー

ポイント50pt

数式でやってみます。
作業列を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())

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

他1件のコメントを見る
id:SALINGER

できるだけトリッキーなことをしないで、質問者側でも理解できるようなもので回答しようと思いましたが説明不足でしたね。

①0か1が連続する場合は何も入らないので何も入れないでください。これは3行目以降の数式で使う初期値になります。

②セルの右下をダブルクリックするとA列が5000行あれば5000行まで数式が自動的に入るはずです。ただし、A列の最後に一つ違う値を入れないとA列がそこで終わりということが判別されないので最終行の数式の値が入らないことを避ける為です。

2012/04/03 00:59:18
id:great_pessimist

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

2012/04/05 21:19:57
id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982012/03/30 21:45:55

ポイント50pt

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

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
id:great_pessimist

takntさん
ご回答いただきありがとうございました。
出来ました!

2012/04/02 18:27:10
id:windofjuly No.3

うぃんど回答回数2625ベストアンサー獲得回数11492012/03/31 20:39:58

ポイント50pt

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

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),"")
id:great_pessimist

windofjulyさん
前回に引き続きご回答いただきありがとうございました。
出来ました!

2012/04/02 18:28:29
  • id:great_pessimist
    SALINGERさん
    takntさん
    windofjulyさん

    ご回答いただきありがとうございました。
    同じ結果を出すのにいろいろな方法があるんですね。
    エクセルすごく便利なのですが残念なことになかなか使いこなせません。
    皆さんがうらやましいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません