- ベストアンサー
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 ・ ・ ・
- みんなの回答 (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),"") 下へコピー。
その他の回答 (6)
- Nouble
- ベストアンサー率18% (330/1783)
仮に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がでないようにも出来ますが お急ぎのご様子なのでこれで用が足りるかなと思いました 如何でしょうか?
お礼
ありがとうございます。エクセルの知識が、陳腐なものしかなく、すいません、イマイチ、理解できませんでした。ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 マクロなら、このようになります。 なお、途中で、数字でないものが入ると、そこで、一旦、カウントが途切れます。 'シートモジュールでも可 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
お礼
ありがとうございます。お恥ずかしい、マクロの知識もなく・・・ お手数をお掛けいたしました。ありがとうございました。
- 221west
- ベストアンサー率36% (168/459)
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),"") 以下同様 何回もしつこくてすいません、これで大丈夫です。
お礼
何度もありがとうございます。 ありがとうございました。
- 221west
- ベストアンサー率36% (168/459)
No.2です。 すいません、後半が違ってました。 C1=IF(A1=1,1,0) C2=IF(A2=1,C1+1,C1) C3=IF(A3=1,C2+1,C2) 以下同様(コピーすればOK) と、なります。
お礼
ありがとうございました。
- 221west
- ベストアンサー率36% (168/459)
以下の様にすれば、その行までに出現した回数が分かります。 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)
ちょいとお酒が入ってるので細かいところが違うかも知れませんが。。。 とりあえず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についてやれば完成です。 至急ならこれで大まかにやれば大丈夫では?
お礼
早々、お答えを賜り、ありがとうございました。
お礼
ありがとうございます。 さっそく試しました。出来ました。 ありがとうございます。助かりました。
補足
皆様、本当にありがとうございました。 貴重なお知恵を賜り、この欄をお借りして、深く御礼申し上げます。