<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rnd関数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/rnd%E9%96%A2%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/rnd関数/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 03 Sep 2021 13:25:40 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>Rnd関数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/rnd関数/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【Access】無作為抽出（ランダム・サンプリング）[Rnd,VBA他]</title>
		<link>https://nyanblog2222.com/programming/899/</link>
					<comments>https://nyanblog2222.com/programming/899/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Mon, 01 Jun 2020 09:00:00 +0000</pubDate>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Rnd関数]]></category>
		<category><![CDATA[無作為抽出]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=899</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/32.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/32.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />今回は、Access無作為抽出の方法をいくつかご紹介します。 無作為抽出とは、ある母集団から、ランダム（無作為）にサンプルを抽出する方法です。使う状況でいえば、例えば企業の市場リサーチを目的としたアンケート等がありますね [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/899/">【Access】無作為抽出（ランダム・サンプリング）[Rnd,VBA他]</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/32.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/32.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/32-768x402.png 768w" sizes="auto, (max-width: 1280px) 100vw, 1280px" />
<p>今回は、Access無作為抽出の方法をいくつかご紹介します。</p>



<p>無作為抽出とは、<strong><span style="color:#b78d4a" class="has-inline-color">ある母集団から、ランダム（無作為）にサンプルを抽出する方法</span></strong>です。<br>使う状況でいえば、例えば企業の市場リサーチを目的としたアンケート等がありますね！</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Rnd関数を使った方法</a><ol><li><a href="#toc2" tabindex="0">クエリから引数なしで呼び出す（失敗例）</a></li><li><a href="#toc3" tabindex="0">方法１：Rnd関数引数あり、RandomizeのみVBA</a></li><li><a href="#toc4" tabindex="0">方法２：VBAで一括ランダム値挿入（マクロ実行）</a></li></ol></li><li><a href="#toc5" tabindex="0">テーブル定義のオートナンバー型（ランダム）を使った方法</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Rnd関数を使った方法</span></h2>



<p>Rnd関数は<strong><span style="color:#b78d4a" class="has-inline-color">「Rnd(引数)」で呼び出し、0以上1未満の単精度浮動小数点型の乱数（疑似乱数）を返します。</span></strong>今回はこのRnd関数を使用してランダム値を生成し、そしてランダム値を使って並びかえ上位から件数分抜き出し、無作為抽出を実現します。</p>



<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-group is-layout-flow wp-block-group-is-layout-flow">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>・Rnd([引数])<br>引数&lt;0：常に同じ数値をシード値として使用します。<br>引数&gt;0：擬似乱数シーケンスの次の番号。<br>引数=0：最近生成された乱数。<br>省略　：擬似乱数シーケンスの次の番号。<br>※乱数ジェネレーターを初期化するには、<span style="color:#b78d4a" class="has-inline-color"><strong>Rnd</strong>&nbsp;</span>を呼び出す前に、引数を指定せずに&nbsp;<span style="color:#b78d4a" class="has-inline-color"><strong>Randomize</strong>&nbsp;</span>ステートメントを使用します。</p><cite>引用：<a class="link" href="https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/rnd-function">Rnd 関数 (Visual Basic for Applications) | Microsoft Docs</a></cite></blockquote>
</div>
</div>



<h3 class="wp-block-heading"><span id="toc2">クエリから引数なしで呼び出す（失敗例）</span></h3>



<p>まず<strong><span style="color:#b78d4a" class="has-inline-color">Rnd関数を使った失敗例</span></strong>からです。<br>単純にクエリでRnd関数を引数なしで呼び出せば無作為抽出できそうではありますが……。</p>



<p>テーブル情報</p>



<figure class="wp-block-image size-large"><img decoding="async" width="206" height="255" src="https://nyanblog2222.com/wp-content/uploads/2020/05/1-min.png" alt="テーブル情報" class="wp-image-1008"/></figure>



<p>クエリ内容<br>・下部の赤枠でRnd関数を呼び出し、右上の赤枠部分で上位25件を抽出</p>



<figure class="wp-block-image size-large"><img decoding="async" width="723" height="423" src="https://nyanblog2222.com/wp-content/uploads/2020/05/2-min.png" alt="クエリ内容" class="wp-image-1009" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/2-min.png 723w, https://nyanblog2222.com/wp-content/uploads/2020/05/2-min-300x176.png 300w" sizes="(max-width: 723px) 100vw, 723px" /></figure>



<p>結果</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="353" height="243" src="https://nyanblog2222.com/wp-content/uploads/2020/05/3-min.png" alt="結果" class="wp-image-1010" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/3-min.png 353w, https://nyanblog2222.com/wp-content/uploads/2020/05/3-min-300x207.png 300w" sizes="auto, (max-width: 353px) 100vw, 353px" /></figure>



<p>このように<strong><span style="color:#b78d4a" class="has-inline-color">全レコードに同じ乱数</span></strong>が入ってしまいます。値がすべて同じなので上位25件ではなく1000件すべてが抽出されてしまっていますね。<br>これはAccessのクエリ最適化の仕様で、<strong><span style="color:#b78d4a" class="has-inline-color">引数なしで関数を呼び出した場合、一度しか実行してくれない</span></strong>ためです（引数1など固定値でもNG）。<br>また、<strong><span style="color:#b78d4a" class="has-inline-color">Randomizeを実行していないため、乱数ジェネレーター（乱数表）が初期化されません</span></strong>。そのため、もう一度Accessを開きなおし同じクエリを実行した場合、同じ結果になってしまいます。</p>



<p>よって上記をふまえ、以下の方法をご紹介します。</p>



<h3 class="wp-block-heading"><span id="toc3">方法１：Rnd関数引数あり、RandomizeのみVBA</span></h3>



<p>先ほどの失敗例を踏まえ、<br><strong><span style="color:#b78d4a" class="has-inline-color">・Rnd関数に引数を与えることでクエリ最適化を避ける</span><span class="has-inline-color has-pale-pink-color"><br></span><span style="color:#b78d4a" class="has-inline-color">・Randomizeを実行し、乱数表を初期化する</span></strong><br>　こちらは逆に１度呼び出されればいいため、クエリ最適化を利用する<br>　（何度も呼び出されると件数が多い場合負荷がかかる）<br>を考慮し、作成しました。</p>



<p>テーブル情報</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="206" height="255" src="https://nyanblog2222.com/wp-content/uploads/2020/05/1-min-1.png" alt="テーブル情報" class="wp-image-1066"/></figure>



<p>クエリ内容<br>・Rnd([社員NO])でランダム値を各レコードに設定<br>・MyRandomize()で初期化<br>　抽出条件（Is Null）を加えることで、表示を消しても関数呼び出しができます。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="519" height="484" src="https://nyanblog2222.com/wp-content/uploads/2020/05/6-min.png" alt="クエリ内容" class="wp-image-1058" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/6-min.png 519w, https://nyanblog2222.com/wp-content/uploads/2020/05/6-min-300x280.png 300w" sizes="auto, (max-width: 519px) 100vw, 519px" /></figure>



<p>VBA：乱数表初期化</p>



<pre class="wp-block-code basic"><code>' MyRandomize()
' 乱数ジェネレータ初期化関数
Public Function MyRandomize()
    Randomize
End Function</code></pre>



<p>結果</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="294" height="552" src="https://nyanblog2222.com/wp-content/uploads/2020/05/7-min.png" alt="結果" class="wp-image-1059" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/7-min.png 294w, https://nyanblog2222.com/wp-content/uploads/2020/05/7-min-160x300.png 160w" sizes="auto, (max-width: 294px) 100vw, 294px" /></figure>



<p>正常に無作為抽出ができました。<br>この方法をとる場合は、<strong><span style="color:#b78d4a" class="has-inline-color">Randomizeの呼び出し漏れに注意</span></strong>です。レコード件数が少なく処理が遅くなってもよいということであれば、ランダム関数を呼び出す定義関数を作り、その中で<strong><span style="color:#b78d4a" class="has-inline-color">Randomize</span></strong>を呼び出してもいいかもしれませんね。</p>



<h3 class="wp-block-heading"><span id="toc4">方法２：VBAで一括ランダム値挿入（マクロ実行）</span></h3>



<p>次に、クエリでRnd関数を呼び出さず、<strong><span style="color:#b78d4a" class="has-inline-color">マクロで定義関数を呼び出し、その定義関数内でRandomize＋Rnd関数を呼び出す</span></strong>方法です。<br>またマクロで実行するため、先日以下の通りご紹介した定義関数で連番もふってます。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-nyanblog wp-block-embed-nyanblog"><div class="wp-block-embed__wrapper">

<a href="https://nyanblog2222.com/access/554/" title="【Access】連番の振り方【Dcount以外も紹介】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" src="https://nyanblog2222.com/wp-content/uploads/2022/11/31-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/31-160x90.png 160w, https://nyanblog2222.com/wp-content/uploads/2022/11/31-120x68.png 120w, https://nyanblog2222.com/wp-content/uploads/2022/11/31-320x180.png 320w, https://nyanblog2222.com/wp-content/uploads/2022/11/31-376x212.png 376w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Access】連番の振り方【Dcount以外も紹介】</div><div class="blogcard-snippet internal-blogcard-snippet">Accessで連番の振り方を４つ紹介します。①EXCELから連番をコピペする②テーブル定義でオートナンバー型を使う③クエリでDcount関数を使う④マクロ（VBA）で連番用関数を作成する。…Dcount関数の処理速度の遅さに悩んでませんか？連番付番で高速処理したい方は必見です♪</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://nyanblog2222.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">nyanblog2222.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2020.05.15</div></div></div></div></a>
</div></figure>



<p><br>テーブル情報<br>・連番とランダム値項目を用意</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="312" height="238" src="https://nyanblog2222.com/wp-content/uploads/2020/05/17-min.png" alt="テーブル情報" class="wp-image-1061" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/17-min.png 312w, https://nyanblog2222.com/wp-content/uploads/2020/05/17-min-300x229.png 300w" sizes="auto, (max-width: 312px) 100vw, 312px" /></figure>



<p>クエリ内容</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="512" height="415" src="https://nyanblog2222.com/wp-content/uploads/2020/05/8-min.png" alt="クエリ内容" class="wp-image-1060" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/8-min.png 512w, https://nyanblog2222.com/wp-content/uploads/2020/05/8-min-300x243.png 300w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>



<p>VBA：ランダム数セット<br>・Randomizeで初期化<br>・Loopでランダム値を各レコードに設定</p>



<pre class="wp-block-code basic"><code>' SetRandom(String,String)
' ランダム値をセット
' P1:テーブル名 or クエリ名
' P2:ランダム値項目名
Public Function SetRandom(TargetName As String, TargetField As String)
    
    ' 乱数ジェネレータを初期化
    Randomize
    
    Dim rsTarget As Recordset
    Set rsTarget = CurrentDb.OpenRecordset(TargetName, dbOpenDynaset)
    
    Do Until rsTarget.EOF
        rsTarget.Edit
        rsTarget.Fields(TargetField) = Rnd()
        rsTarget.Update
        rsTarget.MoveNext
    Loop
End Function</code></pre>



<p>結果</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="470" height="553" src="https://nyanblog2222.com/wp-content/uploads/2020/05/11-min.png" alt="結果" class="wp-image-1062" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/11-min.png 470w, https://nyanblog2222.com/wp-content/uploads/2020/05/11-min-255x300.png 255w" sizes="auto, (max-width: 470px) 100vw, 470px" /></figure>



<p>正常に無作為抽出ができました。連番もついてますね。<br>この方法だと<strong><span style="color:#b78d4a" class="has-inline-color">確実にRandomizeを呼び出す</span></strong>ので、引き継ぎの際もわかりやすいかもしれませんね。ただマクロを使い慣れていないユーザもいるでしょうから、クエリだけでできないところがデメリットです。</p>



<h2 class="wp-block-heading"><span id="toc5">テーブル定義のオートナンバー型（ランダム）を使った方法</span></h2>



<p>あまりおすすめしませんが、Rnd関数を使わず、<strong><span style="color:#b78d4a" class="has-inline-color">オートナンバー型でランダム値をセット</span></strong>することもできます。</p>



<p>テーブル１（元テーブル）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="206" height="255" src="https://nyanblog2222.com/wp-content/uploads/2020/05/1-min-2.png" alt="テーブル１（元テーブル）" class="wp-image-1067"/></figure>



<p>クエリ１（追加クエリ）<br>・後述のテーブル２にレコードを追加</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="460" height="302" src="https://nyanblog2222.com/wp-content/uploads/2020/05/13-min.png" alt="クエリ１（追加クエリ）" class="wp-image-1064" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/13-min.png 460w, https://nyanblog2222.com/wp-content/uploads/2020/05/13-min-300x197.png 300w" sizes="auto, (max-width: 460px) 100vw, 460px" /></figure>



<p>テーブル２<br>・オートナンバー型のランダム値項目を設定しておく</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="364" height="271" src="https://nyanblog2222.com/wp-content/uploads/2020/05/12-min.png" alt="テーブル２" class="wp-image-1063" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/12-min.png 364w, https://nyanblog2222.com/wp-content/uploads/2020/05/12-min-300x223.png 300w" sizes="auto, (max-width: 364px) 100vw, 364px" /></figure>



<p>クエリ１実行結果<br>この時点で連番が振られています。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="241" height="410" src="https://nyanblog2222.com/wp-content/uploads/2020/05/14-min.png" alt="クエリ１実行結果" class="wp-image-1070" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/14-min.png 241w, https://nyanblog2222.com/wp-content/uploads/2020/05/14-min-176x300.png 176w" sizes="auto, (max-width: 241px) 100vw, 241px" /></figure>



<p>クエリ２（件数分抽出）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="465" height="353" src="https://nyanblog2222.com/wp-content/uploads/2020/05/15-min.png" alt="クエリ２（件数分抽出）" class="wp-image-1068" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/15-min.png 465w, https://nyanblog2222.com/wp-content/uploads/2020/05/15-min-300x228.png 300w" sizes="auto, (max-width: 465px) 100vw, 465px" /></figure>



<p>結果</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="220" height="527" src="https://nyanblog2222.com/wp-content/uploads/2020/05/16-min-1.png" alt="結果" class="wp-image-1071" srcset="https://nyanblog2222.com/wp-content/uploads/2020/05/16-min-1.png 220w, https://nyanblog2222.com/wp-content/uploads/2020/05/16-min-1-125x300.png 125w" sizes="auto, (max-width: 220px) 100vw, 220px" /></figure>



<p>正常に無作為抽出ができました。<br><strong><span style="color:#b78d4a" class="has-inline-color">VBAやマクロを使わない</span></strong>ということがメリットですが、無理やり組んだ印象が強く、個人的には分かりづらいかなと思います。</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/899/">【Access】無作為抽出（ランダム・サンプリング）[Rnd,VBA他]</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/899/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
