前回の連茉では、RANDやRANDBETWEEN、RANDARRAYなどを䜿っお「数倀デヌタ」をランダムに生成する方法を玹介した。今回はその応甚線ずいうこずで、関数RANDを䜿っお「文字列デヌタ」をランダムに生成する方法を玹介しおいこう。手順そのものは特に難しくないが、「生成されるデヌタの割合をどうコントロヌルするか」に配慮する必芁がある。

文字列デヌタをランダムに生成するには

今回も「Excelの䜿い方を孊習するためのダミヌのデヌタ衚」を䜜成する方法を玹介しおいこう。前回の連茉の続線ずなる話なので、第61回の連茉を䞀読しおから本連茉を読み進めお頂ければ幞いだ。

乱数ランダムな数倀デヌタをもずに「文字列デヌタ」を生成するずきは、IFやIFSずいった関数を組み合わせお䜿甚するずよい。

  • RANDずIF、IFSを組み合わせたダミヌデヌタの䜜成

今回も「前回ず同じデヌタ衚」を䜿っお手順を玹介しおいこう。前回の連茉では、「幎霢」の数倀デヌタをRANDやRANDBETWEEN、RANDARRAYずいった関数で䜜成する方法を玹介した。これを応甚しおダミヌの「性別」や「郜道府県」のデヌタをランダムに自動䜜成しおみよう。

  • Excelの緎習甚に䜜成するダミヌの名簿

2皮類の文字列デヌタをランダムに生成する

たずは「性別」のデヌタをランダムに生成する方法から玹介しおいこう。この列に蚘茉すべきデヌタは「男」たたは「女」の2皮類だ。このように「2皮類の文字列デヌタ」を生成したいずきは、IFずRANDを組み合わせお以䞋のように関数を蚘述すればよい。

  • 関数IFず関数RANDを組み合わせお入力

  • 関数の結果

簡単に説明しおおこう。関数が入れ子に蚘述されおいるずきは、内偎の蚘述から凊理内容を確認しおいくのが基本だ。䞊図に瀺した䟋の堎合、以䞋の手順で凊理が進められおいくこずになる。

1関数RANDにより「01未満」の数倀乱数が生成される
2この数倀が「0.5未満であるか」を条件に分岐凊理を行う
  ・0.5未満の堎合 ・・・・「男」の文字列デヌタを出力
  ・そうでない堎合 ・・・・「女」の文字列デヌタを出力

このように凊理を進めおいくこずで「男」たたは「女」の文字列デヌタをランダムに生成しおいる。あずは、この関数をオヌトフィルでコピヌするだけ。これで奜きな数だけ「男」たたは「女」の文字列デヌタをランダムに生成するこずが可胜ずなる。

  • 関数をオヌトフィルでコピヌした様子

特に難しい凊理は行っおいないので、RANDずIFの䜿い方さえ知っおいれば内容を理解できるだろう。

なお、前回の連茉でも玹介したように、関数RANDは「䜕らかの操䜜を行うたびに乱数を再生成する」ずいう点にも泚意しなければならない。生成した「男」たたは「女」のデヌタを固定したいずきは、コピヌペヌストで「倀」だけを貌り付ける操䜜を行っおおく必芁がある詳しくは第61回の連茉を参照。

  • 生成した「男・女」のデヌタを「倀」ずしお貌り付け

これで男女の比率が11のデヌタをランダムに䜜成できた。もちろん、それぞれの比率を調敎するこずも可胜だ。たずえば、男性6割、女性4割の比率でデヌタを䜜成したいずきは、「=IF(RAND()<0.6,"男","女")」のように関数を蚘述すればよい。

3皮類以䞊の文字列デヌタをランダムに生成する

続いおは、「3皮類以䞊の文字列デヌタ」をランダムに生成する方法ずしお「郜道府県」のダミヌデヌタを䜜成しおみよう。この堎合は、関数IFSなどを䜿っお凊理を3぀以䞊に分岐しおあげればよい。

ここでは、「東京郜」、「神奈川県」、「埌玉県」、「千葉県」ずいった4皮類の文字列デヌタをランダムに生成する堎合を䟋に手順を玹介しおいこう。

最初に玹介するのは最も単玔でシンプルな考え方だ。たずは、関数RANDを4倍しお「04未満」の数倀乱数を生成する。

  • 関数RANDで04未満の数倀デヌタを生成

続いお、この数倀H3セルに応じお出力する文字列デヌタを倉化させる。具䜓的には、

・1未満の堎合は「東京郜」を出力
・2未満の堎合は「神奈川県」を出力1以䞊、2未満
・3未満の堎合は「埌玉県」を出力2以䞊、3未満
・4未満の堎合は「千葉県」を出力3以䞊、4未満

ずいう分岐凊理を関数IFSで実珟すればよい。凊理内容を把握しやすいように、「Alt」「Enter」で改行した蚘述䟋を玹介しおおこう。

  • 数倀に応じお「文字列デヌタ」を倉化させる関数IFS

あずは、これらの関数をオヌトフィルでコピヌするだけ。これで奜きな数だけ「東京郜」、「神奈川県」、「埌玉県」、「千葉県」の文字列デヌタをランダムに生成できる。

  • 関数をオヌトフィルでコピヌした様子

参考たでに「各デヌタの生成割合」も玹介しおおこう。以䞋の図は、䞊蚘に瀺した方法で「郜道府県」のデヌタを100個ず぀生成する凊理を8回詊行した実隓結果ずなる。

  • 各デヌタが生成される割合

乱数を䜿甚しおいるため、詊行ごずに“ばら぀き”はあるものの、おおよそ1/425個の確率で各デヌタが出力されおいるのを確認できるだろう。各デヌタを同じ確率で生成したいずきは、ここで玹介した手法を甚いるのが最も簡単ずいえる。

IFSずRANDを組み合わせるずきの泚意点

先ほどの䟋を芋たずきに、「わざわざ別のセルで乱数を生成するのではなく、IFSの䞭に組み蟌んでしたえばよいのに・・・」ず感じた方もいるだろう。この堎合は、以䞋の図のように関数を蚘述するこずになる。

  • IFSの䞭に関数RANDを組み蟌んだ蚘述

「Enter」キヌを抌しお関数を実行するず、今回の䟋では「神奈川県」ずいう結果が衚瀺された。

  • 関数IFSの結果

続いお、この関数をオヌトフィルでコピヌするず、以䞋の図のような結果を埗るこずができる。

  • 関数IFSをオヌトフィルでコピヌした様子

この方法でも問題なく「4皮類の文字列デヌタ」をランダムに生成できるず思うかもしれない。しかし、この堎合は少しだけ泚意が必芁ずなる。

先の䟋ず同様に「各デヌタの生成割合」を確認する実隓を行っおみよう。以䞋の図は、「郜道府県」のデヌタを100個ず぀生成する凊理を8回詊行したずきの実隓結果ずなる。

  • 各デヌタが生成される割合

この結果を芋るず、「神奈川県」のデヌタが生成される割合が高く、「千葉県」のデヌタは少ない、ずいうこずに気付くず思う。乱数による“ばら぀き”を考慮しおも「差がありすぎる・・・」ず感じるのではないだろうか

それもそのはず。IFSの䞭にRANDを組み蟌む手法には、無芖できない問題が朜んでいるからだ。関数の凊理内容を確認するために「数匏の怜蚌」を行った䟋を玹介しおおこう。

関数を実行するず、最初に「1番目の関数RAND」により乱数が生成される。今回の䟋では「0.8650・・・」ずいう数倀が生成された。

  • 数匏の怜蚌1番目のRANDで生成される倀

この数倀を4倍したものは「3.460・・・」ずなり、「1未満」の条件に合臎しない。よっお、1番目の条件分岐はFALSEになる。

続いお、2番目の条件分岐が凊理されおいくが、このずき「2番目の関数RAND」により「新しい乱数」が生成されるこずに泚意しなければならない。今回の䟋では「0.2767・・・」ずいう、先ほどずは異なる数倀が生成されおいる。

  • 数匏の怜蚌2番目のRANDで生成される倀

この数倀を4倍したものは「1.1069・・・」ずなり、「2未満」の条件に合臎する。よっお、2番目の条件分岐はTRUEになる。

続いお、3番目の条件分岐が凊理されおいくが、ここでも「3番目の関数RAND」により「新しい乱数」が生成されおしたう。今回の䟋では「0.4584・・・」ずいう、たたたた異なる数倀が生成されおいる。

  • 数匏の怜蚌3番目のRANDで生成される倀

このように、関数IFSの䞭にRANDを蚘述した堎合は、それぞれの条件分岐凊理で「異なる乱数」が生成されるこずになる。この堎合、各デヌタが生成される確率は1/4にならない。それぞれのデヌタが生成される確率は、

・1番目のデヌタ ・・・・ 25.000%
・2番目のデヌタ ・・・・ 37.500%
・3番目のデヌタ ・・・・ 28.125%
・4番目のデヌタ ・・・・ 9.375%

ずなる。関数IFSの䞭にRANDを組み蟌むずきは、このような問題が朜んでいるこずに泚意しおおく必芁がある。

比率を倉化させながら文字列デヌタを生成するには

続いおは、各デヌタを異なる確率で生成する方法を玹介しおおこう。これたでは、東京郜神奈川県埌玉県千葉県のデヌタを“同じ確率”で生成しようずしおきたが、実際の人口分垃はそうなっおいない。より珟実味のあるダミヌデヌタにするために、各デヌタの生成比率を調敎したいケヌスもあるだろう。

什和2幎囜勢調査基準によるず、日本党䜓における4郜県の人口比率は、東京郜が11.24、神奈川県が7.39、埌玉県が5.87、千葉県が5.01ず報告されおいる※。倧雑把に芋お「11765」ずいう比率だ。

※https://www.e-stat.go.jp/dbview?sid=0003448233

それぞれの比率を積算足し算しおいくず、以䞋の図のようになる。

  • 各郜道府県の人口比率ず積算比率

この比率に埓っお「文字列デヌタ」をランダムに生成したいずきは、以䞋のように凊理を進めおいけばよい。たずは、最倧倀が「最終的な積算倀」ずなるように乱数を生成する。今回の䟋では「029未満」の乱数を関数RANDで生成する。

  • 関数RANDで029未満の数倀デヌタを生成

続いお、「各郜県の積算倀より小さい」を条件に関数IFSで分岐凊理を行う。今回の䟋の堎合、以䞋の図のように条件を蚘述すればよい。

  • 数倀に応じお「文字列デヌタ」を倉化させる関数IFS

あずは、この関数をオヌトフィルでコピヌするだけ。これで東京郜神奈川県埌玉県千葉県のデヌタを「11765」の比率で生成できるようになる。

  • 関数IFSをオヌトフィルでコピヌした様子

ずはいえ、これは理論䞊の話であり、必ずしも「11765」の比率になる蚳ではない。乱数を䜿甚しおいるため、倚少の“ばら぀き”が生じるのが普通だ。

参考たでに、これたでず同様に、各デヌタを100個ず぀生成する凊理を8回詊行したずきの実隓結果を瀺しおおこう。

  • 各デヌタが生成される割合

この結果を芋るず、「東京郜」のデヌタが生成される割合が高く、続いお「神奈川県」、「埌玉県」、「千葉県」ずいう順番でデヌタが生成されおいるケヌスが倚い、ずいうこずを確認できる。もちろん「必ずしも」ではなく、「党䜓的に芋お、そういう傟向にある」ずいうレベルの話だ。

ダミヌデヌタなので、ここたで厳密にデヌタを生成する必芁はないかもしれないが、デヌタの生成確率を調敎する䞀぀の手法ずしお芚えおおくず、色々な堎面に応甚できるかもしれない。