• ベストアンサー

Excel 連続した回数の把握 (できたら至急)

A列に以下のように、『0』と『1』が不規則に約4000個並んでいます。 今、『0』または『1』が”連続”して現われる回数を、それぞれ把握したいのですが、眼で確認してB列に『0』の連続回数を、C列に『1』の連続回数を打ち込んでいます。このままでは、一生かかりそうです(オーバー)、何か良いやり方ありませんでしょうか? A列 B列 C列 0 0    2 1 1       2 0 0 0 0    4 1 ・ ・ ・

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

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

データが1行目からあるとして、 B1=IF(AND(A1=0,A2=1),1,"") B2=IF(AND(A2=0,A3=1),ROW()-SUM($B$1:C1),"") 下へコピー。 C1=IF(AND(A1=1,A2=0),1,"") C2=IF(AND(A2=1,A2=0),ROW()-SUM($B$1:C1),"") 下へコピー。

sannsyokupann
質問者

お礼

ありがとうございます。 さっそく試しました。出来ました。 ありがとうございます。助かりました。

sannsyokupann
質問者

補足

皆様、本当にありがとうございました。 貴重なお知恵を賜り、この欄をお借りして、深く御礼申し上げます。

その他の回答 (6)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.6

仮にA10からA2500までデーターが記入されていたとします この時 A9にデータと記入してください B行に0の連続数 C行に1の連続数が表示される この条件下で話をします 相違点は読み替えてくださいね 回答は2パターンできました それでは行きましょう パターン1です B10 =IF((A9<>A10)*(A10=0),MATCH(1,A10:$A$2500,0)-1,"") C10 =IF((A9<>A10)*(A10=1),MATCH(0,A10:$A$2500,0)-1,"") パターン2です まずB10:C10に対しセルの書式設定から表示形式・ユーザー定義と進み#を設定してください B10 =(A9<>A10)*(A10=0)*(MATCH(1,A10:$A$2500,0)-1) C10 =(A9<>A10)*(A10=1)*(MATCH(0,A10:$A$2500,0)-1) どちらのパターンもB10:C10を選択しオートフィルなどでB2500:C2500までコピーしてください (データ位置が変わるときは数式の数値も変更してくださいね) 残念ながらデータの途中で必ず#N/Aが現れますが それ以降同じ値が続く事を意味します きっちり#N/Aがでないようにも出来ますが お急ぎのご様子なのでこれで用が足りるかなと思いました 如何でしょうか?

sannsyokupann
質問者

お礼

ありがとうございます。エクセルの知識が、陳腐なものしかなく、すいません、イマイチ、理解できませんでした。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 マクロなら、このようになります。 なお、途中で、数字でないものが入ると、そこで、一旦、カウントが途切れます。 'シートモジュールでも可 Sub CountSerial()  Dim i As Long  Dim buf As Variant  Dim cnt As Variant  Application.ScreenUpdating = False  For i = 1 To Range("A65535").End(xlUp).Row   If VarType(Cells(i, 1).Value) = vbDouble Then    buf = Cells(i, 1).Value    If cnt = Empty Then     cnt = 1    ElseIf buf = Cells(i, 1).Value Then     cnt = cnt + 1    End If    If buf <> Cells(i + 1, 1).Value Then     Cells(i, 2).Offset(, CLng(buf)).Value = cnt     cnt = Empty    End If   End If  Next i  Application.ScreenUpdating = True End Sub

sannsyokupann
質問者

お礼

ありがとうございます。お恥ずかしい、マクロの知識もなく・・・ お手数をお掛けいたしました。ありがとうございました。

  • 221west
  • ベストアンサー率36% (168/459)
回答No.4

No.2およびNo.3です。 すいません、質問をきちんと読んでませんでした。「連続」だったんですね。 B1=IF(A1=0,1,"") B2=IF(A2=0,IF(B1="",1,B1+1),"") 以下同様 C1=IF(A1=1,1,"") C2=IF(A2=1,IF(C1="",1,C1+1),"") 以下同様 何回もしつこくてすいません、これで大丈夫です。

sannsyokupann
質問者

お礼

何度もありがとうございます。 ありがとうございました。

  • 221west
  • ベストアンサー率36% (168/459)
回答No.3

No.2です。 すいません、後半が違ってました。 C1=IF(A1=1,1,0) C2=IF(A2=1,C1+1,C1) C3=IF(A3=1,C2+1,C2) 以下同様(コピーすればOK) と、なります。

sannsyokupann
質問者

お礼

ありがとうございました。

  • 221west
  • ベストアンサー率36% (168/459)
回答No.2

以下の様にすれば、その行までに出現した回数が分かります。 B1=IF(A1=0,1,0) B2=IF(A2=0,B1+1,B1) B3=IF(A3=0,B2+1,B2) 以下同様(コピーすればOK) C1=IF(A1=1,1,0) C2=IF(A2=1,B1+1,B1) C3=IF(A3=1,B2+1,B2) 以下同様(コピーすればOK)

  • reki4649
  • ベストアンサー率21% (116/539)
回答No.1

ちょいとお酒が入ってるので細かいところが違うかも知れませんが。。。 とりあえず0の連続する所を表示させる方法。 一列で収める方法が思いつかなかったので2列で。 A列  B列   C列 0  =if(c2=0,c1,0)  =if(a1=0,1,0) 1 =if(c3=0,c2,0) =if(a2=0,1+c1,0) 1   繰り返し    繰り返し 0 0 0 0     C列で0が連続すれば足していって1が出れば0にする。 その後、B列でC列の連続した一番大きい数(次が0の所)だけを 持ってきます。 後は0を消せばOK。 その後 同じように1についてやれば完成です。 至急ならこれで大まかにやれば大丈夫では?

sannsyokupann
質問者

お礼

早々、お答えを賜り、ありがとうございました。

関連するQ&A