同じ数字が連続する箇所を数える関数
- N個の乱数から、最大n連続する数字の個数を数える関数を作成することで、同じ数字が連続する確率を統計的に求めることができます。
- 乱数を10個発生させた場合を例にとると、最大2連続している箇所が2箇所、最大3連続している箇所が1箇所、最大4連続している箇所が0箇所などを数えることができます。
- また、一万回繰り返して、各n(2~10)について集計することで、最大n連続する数字の出現確率を推定することも可能です。これにより、センター試験などで同じ数字が連続する確率を知ることができます。
- ベストアンサー
同じ数字が連続する箇所を数える関数
エクセルである関数を作ろうとしています。 まず前提として僕が知ろうとしているのは、「(1)~(4)の4択形式の試験で全N問あったとき、同じ数字が最大n連続するものが一つでも現れる確率は◯◯だ」ということが知りたいと思っています。 センター試験とかで同じ数字が何連続も続くと不安になりますよね?あれはどういう確率分布をしているのか、統計的に調べてみようという感じです。 そのために、Nに色々数値を代入して、(例えば10でやってみましょう)10個の乱数を発生させます。 その中で同じ数字が最大2連続している箇所の個数、最大3連続している箇所の個数、最大4連続している箇所の個数・・・、最大10連続している箇所の個数、をそれぞれ数えます。これを例えば1万回繰り返して、最大n(2~10)連続する箇所が1万回の試行回数のうちで何回出てきたかを集計すれば、だいたいどれくらいの確率で最大n連続するものが出現するかが分かるのでは、という寸法です。 長くなりましたが知りたいのは、 『乱数を10個発生させ、例えば 1433444133とすると、 この中で数字が 最大2連続している箇所が2箇所 最大3連続している箇所が1箇所 最大4連続している箇所が0か所 ・・・ 最大10連続している箇所が0か所 のようなことが分かる関数』 で、できれば 『これを一万回繰り返して、各n(2~10)について集計してくれる関数』 をぜひ考えてほしいです!>< 皆様のアイディアを頂ければ嬉しいです。よろしくお願いします…!
- Excel(エクセル)
- 回答数8
- ありがとう数6
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
回答No.3です。 申し訳御座いません。 回答No.3のB2セルに入力する関数において、参照先のセルの1つを間違えておりました。 ですから、B2セルに入力する関数を以下の様に変更して下さい。 × =IF(ISNUMBER(INDEX($A:$A,ROW())),IF(AND(INDEX($A:$A,ROW())=INDEX($A:$A,ROW()-1),MOD(ROW()-1,$F$3)),INDEX(B:B,ROW()-1)+1,1),"") ↓ 〇 =IF(ISNUMBER(INDEX($A:$A,ROW())),IF(AND(INDEX($A:$A,ROW())=INDEX($A:$A,ROW()-1),MOD(ROW()-1,$F$2)),INDEX(B:B,ROW()-1)+1,1),"")
その他の回答 (7)
- ushi2015
- ベストアンサー率51% (241/468)
こんばんは No4です。 酷い間違いをしてました。 差し替えて下さい。 標準モジュールの先頭から、 Option Explicit Public v() Sub test() Dim i As Long Dim j As Long Dim vMax As Variant Dim vMin As Variant Dim m As Long Dim t As Variant m = 10 vMin = 1 vMax = 4 Range("A1").CurrentRegion.ClearContents ReDim v(1 To m) For j = 1 To 20000 t = "" For i = 1 To m Randomize t = t & Int((vMax - vMin + 1) * Rnd + vMin) Next Cells(j, 1) = "'" & t Call test1(t, m) Next Range("B1").Resize(m).Formula = "=ROW(B1)" Range("C1").Resize(m) = WorksheetFunction.Transpose(v) End Sub Sub test1(s As Variant, k As Long) Dim c As Long Dim i As Long Dim j As Long i = 1 Do Until i > k c = 0 For j = i + 1 To k + 1 If Mid(CStr(s), i, 1) <> Mid(CStr(s), j, 1) Then c = c + 1 Exit For End If c = c + 1 i = i + 1 Next i = i + 1 v(c) = v(c) + 1 Loop End Sub
お礼
ありがとうございます!! マクロはあまりなじみがないのですが、これを機にちょっと勉強してみたいと思います! ご丁寧に、ありがとうございました!!
- keithin
- ベストアンサー率66% (5278/7940)
数えて集計するだけです。ムズカシイ計算をする必要はありません。 添付図: A2以下に数字を列記 B2に =IF(A1<>A2,SUMPRODUCT(MATCH(FALSE,A2:A99=A3:A100,0)),"") 以下コピー D列に集計したい1,2,3,4,5…を列記 E2に =COUNTIF(B:B,D2) 以下コピーして完成。 #Nが大きいときは検査範囲を適切に見直す事。検査範囲を無意味に大きくしない事。
お礼
あ、ありがとうございます!! よく吟味してみます。
- bunjii
- ベストアンサー率43% (3589/8248)
回答No.1です。 3連続から10連続を2連続から9連続と重複をしないようにするときは次の数式に変更してください。 B1=SUMPRODUCT((MID($A1,COLUMN($A1:$I1),COLUMN(A1))=MID($A1,COLUMN($B1:$J1),COLUMN(A1)))-(C1:K1*COLUMN($B1:$J1))) 但し、K列からS列まではブランクのままにしてください。 0以外の何らかのデータまたは数式が設定されていると正しい結果が得られなくなります。 が入力B1セルを右へJ1までコピーし、B1:J1を下へ10000行までコピーします。 10001行目へSUM関数で縦計を10000で除し、%表示すれば出現割合が算出できます。 再計算はF9キーの打鍵で実行されます。 貼付画像はExcel 2013で検証した結果です。
お礼
こちらも、非常に分かりやすい関数でご説明頂きありがとうございます!! 本当に助かりました…!
- ushi2015
- ベストアンサー率51% (241/468)
こんばんは マクロで、 Option Explicit Public v() Sub test() Dim i As Long Dim vMax As Variant Dim vMin As Variant vMin = 0 vMax = 9999999999# ReDim v(1 To Len(vMax)) Randomize For i = 1 To 2000000 Randomize Call test1(Int((vMax - vMin + 1) * Rnd + vMin), Len(vMax)) Next Range("A1").CurrentRegion.ClearContents Range("A1").Resize(Len(vMax)).Formula = "=ROW(A1)" Range("B1").Resize(Len(vMax)) = WorksheetFunction.Transpose(v) End Sub Sub test1(s As Variant, k As Long) Dim c As Long Dim i As Long Dim j As Long i = 1 Do Until i > k c = 0 For j = i + 1 To k + 1 If Mid(CStr(s), i, 1) <> Mid(CStr(s), j, 1) Then c = c + 1 Exit For End If c = c + 1 i = i + 1 Next i = i + 1 v(c) = v(c) + 1 Loop End Sub
- kagakusuki
- ベストアンサー率51% (2610/5101)
まず、E1セルに「選択肢の数」、E2セルに「問題数」、E3セルに「試行回数」、E5セルに「データ総数」、E6セルに「最大連続回数」、E8セルに「連続回数出現数」、F8セルに「出現数」、G8セルに「出現率」と入力して下さい。 次に、A1セルに次の関数を入力して下さい。 =IF($B$1="","",IF(ROW()>$F$2*$F$3,"",INT(RAND()*$F$1+1))) 次に、B1セルに次の関数を入力して下さい。 =IF(COUNT($F$1,$F$2,$F$3)=3,IF(AND($F$1>0,$F$1=INT($F$1),$F$2>0,$F$2=INT($F$2),$F$3>0,$F$3=INT($F$3)),1,""),"") 次に、A2セルに次の関数を入力して下さい。 =IF($B$1="","",IF(ROW()>$F$2*$F$3,"",INT(RAND()*$F$1+1))) 次に、B2セルに次の関数を入力して下さい。 =IF(ISNUMBER(INDEX($A:$A,ROW())),IF(AND(INDEX($A:$A,ROW())=INDEX($A:$A,ROW()-1),MOD(ROW()-1,$F$3)),INDEX(B:B,ROW()-1)+1,1),"") 次に、C1セルに次の関数を入力して下さい。 =IF(ISNUMBER(INDEX(B:B,ROW())),IF(AND(INDEX($A:$A,ROW())=INDEX($A:$A,ROW()+1)),"",INDEX($B:$B,ROW())),"") 次に、C1セルをコピーしてC2セルに貼り付けて下さい。 次に、A2~C2のセル範囲をコピーして、A列~C列の3行目以下に(問題数×試行回数を上回る行数になるまで)貼り付けて下さい。 次に、F5セルに次の関数を入力して下さい。 =COUNT($C:$C) 次に、F6セルに次の関数を入力して下さい。 =IF(COUNT($C:$C),MAX($C:$C),"") 次に、E9セルに次の関数を入力して下さい。 =IF(ROWS(E$9:E9)>SUM($F$6),"",ROWS(E$9:E9)) 次に、F9セルに次の関数を入力して下さい。 =IF(ISNUMBER($E9),COUNTIF($C:$C,$E9),"") 次に、G9セルに次の関数を入力して下さい。 =IF(ISNUMBER($E9),$F9/$F$5,"") 次に、G9セルの書式設定の表示形式を[パーセンテージ]にした上で、小数点以下の桁数を適当な値に設定して下さい。 次に、E9~G9のセル範囲をコピーして、E列~G列の10行目以下に貼り付けて下さい。 以上で準備は完了で、最後にF1、F2、F3の各セルに選択肢の数(4択形式なら4)、問題数、試行回数(1万回なら10000)を入力しますと、E9以下に同じ値が連続している回数が、F9以下にE列の連続回数となっている箇所が何箇所あるのかをカウントした結果が、G9以下にそれぞれの連続回数が現れる頻度が、それぞれ表示されます。
- okormazd
- ベストアンサー率50% (1224/2412)
「一万回繰り返して」というが、10万個の乱数を10個ずつ分けた単位でその単位内で連続する回数を数えるのと違わないように思うが。それなら、 1. A1:A100000に「=RANDBETWEEN(1,10)」を入れて、乱数をとる。 2. B2に「=IF(AND(MOD(ROW(),10)<>1,A2=A1),1,"")」と入れてB100000までフィル(コピー)する。 3. C2に「=IF(AND(B4=1,B3=1),1,"")」と入れて、J2までフィル(コピー)し、これをさらにB100000:J100000までフィル(コピー)する。 4. B100001に「=SUM(B1:B100000)」と入れて、J100001までフィル(コピー)する。 5. B100003に「=B100001-SUM(C100001:K100001)」と入れて、J100003までフィル(コピー)する。 6. B100003からJ100003にそれぞれ2,3、・・・連続回数がカウントされる。 なお、添付には100002行に何連続かの数を入れてある。
お礼
こんなシンプルな方法でできてしまうとは・・!さすがの知恵で御座います。恐れ入りました。本当にありがとうございます!!!!!
- bunjii
- ベストアンサー率43% (3589/8248)
>例えば >1433444133とすると、 >この中で数字が >最大2連続している箇所が2箇所 >最大3連続している箇所が1箇所 >最大4連続している箇所が0か所 2連続の箇所は4箇所になります。 33が2箇所 44が2箇所(444には44が2箇所連続) A1=1433444133 として下記の数式をB1へ入力し、右へJ1までコピーします。 B1=SUM(INDEX((MID($A1,ROW($A$1:$A$9),COLUMN(A1))=MID($A1,ROW($A$2:$A$10),COLUMN(A1)))*1,0))
関連するQ&A
- 確率分布関数の絶対連続性と特異連続性の違いについて質問です。
確率分布関数の絶対連続性と特異連続性の違いについて質問です。 もし一言で分布関数の絶対連続と特異連続の違いを説明するようにいわれたとしたら、 「絶対連続のときは確率密度関数をもつが、特異連続のときは確率密度関数をもたない(密度関数で分布を表すことができない)」 と述べるのは適切でしょうか? よろしくお願いします。
- 締切済み
- 数学・算数
- エクセルで連続している数字の分類をする。
エクセルにて、 A B C 一 二 2 3 5 三 2 5 4 四 1 5 4 五 5 5 2 六 このように、試験の解答の集計をしており、A,B,C列のそれぞれで、連続した数字のセット個数を数えたい。その中で、A列の2が連続している2連続と、B列の5が3連続している物とを、分けてカウントしたい、また、その二つをかぶらせずに別のものとしてカウントしたいのですが、どのようにしたらいいか、アドバイスを頂ければ嬉しいです。(2連続と3連続のカウント数を別のところで集計してます。) (3つ以上は連続したものがありません。2連続か、3連続のどちらかです。 しかし、数字のパターンが1~5の選択問題の為、5パターンあります。) ちなみに、今使っている物は ROUNDDOWN(SUMPRODUCT((A2:A5<>"")*SIGN((A2:A5=A3:A6)+(A2:A5=A1:A4)))/2,0) という式を使って数えているのですが、B列の5のように3連続が2つきてしまうと、数が2つ増えてしまい、切り捨てできずに1増えてしまう状態です。 お手数ですが、ご回答のほどよろしくお願いします。
- ベストアンサー
- Excel(エクセル)
- 連続と離散の確率分布の関数について
確率変数が連続量(実数)の場合と離散量(例:サイコロ)の場合があります。 連続型の確率分布の場合、確率密度を例えば∞からaまで積分したものを確率分布P(a)としているのではないでしょうか。連続量ですから微分とか積分となじみます。 一方で離散量(例:サイコロ)では、変数と言っても1,2,3,4,5,6しかありません。、確率分布は1/6の等分布です。離散量ですから微分もできず、そういう意味で確率密度関数もないようなのですが、確率質量関数というものがあるようです。これは昔からあるものでしょうか。テキストには載っていないようです。確率の説明では常にサイコロを用いた離散量での説明が教科書に載っています。そのため確率質量関数は出てきておかしくないのにあまりなじみがないように感じています。これは昔からずっとあるものでしょうか。
- 締切済み
- 数学・算数
- 連続した整数を返す関数はあるでしょうか
人の名前を入力した隣りのセルにだけ、上の人から順に1,2,3…と自動的に番号を振っていきたいのですが、ちょうどいい関数が分からなくて困っています。 10まで数字が振れればOKなんですが… 乱数を発生させて、上から順に1,2,3…と並ぶようにするとか、いろいろやってみたんですがうまくできません。(数が重複してしまったり) 何か良い関数はないでしょうか・・
- ベストアンサー
- オフィス系ソフト
- Rand関数について
Rand関数について コンピューターの素人です。以下のカッコの中の理解で間違いないかどうか、教えてください。 「Rand関数は乱数を発生させる関数である。Rand関数は最小値と最大値を指定して、その範囲で整数の乱数を発生させることができる。」
- 締切済み
- その他(生活・暮らし)
- エクセルで同じ数字が連続している個数を関数でセルに出力
A列に1かー1かいずれかの数字が入力されているとき、その行から上方に数えて、B列には1の連続している個数を、C列にはー1の連続している個数を出力したいのです。例えば A列 B列 C列 1 1 0 1 2 0 -1 0 1 -1 0 2 -1 0 3 といった具合です。 この時、B列、C列にはどのような関数を入力すればよいでしょうか。
- ベストアンサー
- その他MS Office製品
- 乱数発生の関数。
確率分布関数が次の表で与えられているとき,この分布に従う乱数を線形補間を使った逆変換によって生成する関数をどうやって作成したらいいか、全くわかりません。線形補間はなんとなくわかるんですが…。どなたか教えてください。 x F(x) 0 0.0024788 1 0.0173513 2 0.0619688 3 0.1512039 4 0.2850565 5 0.4456796 6 0.6063028 7 0.7439798 8 0.8472375 9 0.9160760 10 0.9573791 11 0.9799080 12 0.9911725 13 0.9963715 14 0.9985996 15 0.9994909 16 0.9998251 17 0.9999431 18 0.9999824 19 0.9999948 20 0.9999985 21 0.9999996 22 0.9999999 23 1.0000000
- ベストアンサー
- C・C++・C#
- Rのrnorm関数について
こんにちは。Rのrnorm関数についての質問です。 ある参考書のrnormに関する説明は正しいのでしょうか?以下、参考書の記述です。 『rnorm関数は、mean=,sd=で指定された平均、標準偏差を持つ正規分布からn=で指定されたサンプルサイズの標本を抽出する。例えば、 >rnorm(n=5,mean=50,sd=10 [1]45.12 [2]46.33 [3]56.32 [4]37.00 [5]47.89』となる。 rnorm関数は、「乱数を5つ発生させる」のではなく、「サンプルサイズが5の標本を5つ発生させる」ということなのでしょうか。乱数をn個、生成する関数だと思っていたので、サンプルサイズという記述があるせいで理解にお困っています。 よろしくお願いします。
- ベストアンサー
- 数学・算数
- ランダムで抽出した数字と該当する数字は
下記のような表があります。 A B C D E F G H I J K L M N O 1 範囲 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 50回毎 2 3 5 6 9 10 11 13 14 16 19 21 22 25 26 =RANDBETWEEN(1,15) で、5つの乱数を出しています。 A B C D E 乱数 3 1 8 13 4 乱数で選んだ数字が、範囲数字(1~15)に該当しているとき、50回毎のどの数字に当てはまるか、関数で求める方法を知りたいのです。 第1数字 3 が、範囲 3 の時、50回毎の 5 第2数字 1 が、範囲 1 の時、50回毎の 2 第3数字 8 が、範囲 8 の時、50回毎の 13 第4数字 13 が、範囲 13 の時、50回毎の 22 第5数字 4 が、範囲 4 の時、50回毎の 6 と、いう感じです。 下手な説明でわかりにくいかと思いますが、どなたかお教え願いますか。
- 締切済み
- Mac
- MS Excelで連続したデータの個数を調べる方法を教えてください。
MS Excelで連続したデータの個数を調べる方法を教えてください。 データ範囲の中で、プラスが何個連続で出たか、その個数の最大値を知りたい。 Aの列に連続で、 1 3 -5 2 3 1 1 -1 1 2 1 とあった場合、プラスが連続した個数は、2回、4回、3回となり、その最大値の4回が得られる方法を御願します。
- ベストアンサー
- その他MS Office製品
お礼
本当にありがとうございます…!選択肢の数、試行回数など変数を色々変えてできるというところまで提示してくださったこと、また、どのセルにどういう関数を入力すればいいか…などまでご丁寧に指導いただいたため、ベストアンサーにさせていただきました。(ここまでしていただいて、お恥ずかしい限りです。。。) 本当に完成度の高いシステム構築、ありがとうございました!!