<?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>ADO | VBA・GAS・Pythonで仕事を楽しく効率化</title>
	<atom:link href="https://officevba.info/category/accessvba/ado/feed/" rel="self" type="application/rss+xml" />
	<link>https://officevba.info</link>
	<description>仕事の役に立つVBA・GAS・Pythonのコードを紹介していきます。</description>
	<lastBuildDate>Fri, 27 Mar 2020 14:45:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://officevba.info/wp-content/uploads/2017/04/cropped-Excel_1-32x32.jpg</url>
	<title>ADO | VBA・GAS・Pythonで仕事を楽しく効率化</title>
	<link>https://officevba.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>条件に一致するレコードの件数を調べるAccessVBA</title>
		<link>https://officevba.info/dcount-rsrecordcount/</link>
					<comments>https://officevba.info/dcount-rsrecordcount/#respond</comments>
		
		<dc:creator><![CDATA[okumasahito]]></dc:creator>
		<pubDate>Sun, 09 Dec 2018 14:23:24 +0000</pubDate>
				<category><![CDATA[ADO]]></category>
		<guid isPermaLink="false">http://officevba.info/?p=1590</guid>

					<description><![CDATA[目次 Accessでのシステムを構築する際にレコードの件数を取得する方法を調べました今回作成したフォームとテーブル・レコードの説明レコードの件数を取得する2通りの方法について関数を使用する方法ADOを使用する方法 Acc [&#8230;]]]></description>
										<content:encoded><![CDATA[
  <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">Accessでのシステムを構築する際にレコードの件数を取得する方法を調べました</a></li><li><a href="#toc2" tabindex="0">今回作成したフォームとテーブル・レコードの説明</a></li><li><a href="#toc3" tabindex="0">レコードの件数を取得する2通りの方法について</a></li><li><a href="#toc4" tabindex="0">関数を使用する方法</a></li><li><a href="#toc5" tabindex="0">ADOを使用する方法</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">Accessでのシステムを構築する際にレコードの件数を取得する方法を調べました</span></h2>
<p>最近仕事でAccessを使用して価格POP（店で価格を表示している紙）を作るシステムを作成しました。</p>
<p>複数のサイズで印刷できるように条件を設定し、レポートで出力する仕組みで作成していたのですが、不要なレポートを開かないようにするために、条件に合うレコードの件数を取得する方法を調べました。</p>
<p>今回はAccessVBAで対象レコードの件数を取得する方法を紹介します。</p>
<h2><span id="toc2">今回作成したフォームとテーブル・レコードの説明</span></h2>
<p>今回作成したシステムのメインのフォームとテーブルは下記のようになっています。</p>
<p><a href="https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f.jpg"><img fetchpriority="high" decoding="async" src="https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f-300x169.jpg" alt="118-1フォーム" width="300" height="169" class="alignnone size-medium wp-image-1585" srcset="https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f-300x169.jpg 300w, https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f-768x432.jpg 768w, https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f-700x394.jpg 700w, https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f-320x180.jpg 320w, https://officevba.info/wp-content/uploads/2018/12/17cc2414bb8b89a5a8d9f615a484477f.jpg 1405w" sizes="(max-width: 300px) 100vw, 300px" /></a> <a href="https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99.jpg"><img decoding="async" src="https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99-300x43.jpg" alt="118-2テーブル" width="300" height="43" class="alignnone size-medium wp-image-1586" srcset="https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99-300x43.jpg 300w, https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99-768x111.jpg 768w, https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99-700x101.jpg 700w, https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99-320x46.jpg 320w, https://officevba.info/wp-content/uploads/2018/12/057abe4976456ed2cd3872e32db08c99.jpg 1973w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>必要な商品のJANコードを読み込ませると商品マスタテーブルから商品名や規格・価格を取得する仕組みです。<br />
印刷したいサイズのチェックボックスにチェックをつけることで印刷ボタンをクリックした際に表示させることができる仕様です。</p>
<p>3パターンあるPOPをレポートで印刷するのですが、件数が1件もない場合レポートを表示させないようにするためレコードの件数を取得する必要がありました。</p>
<p>よく「レポート 件数 取得 Access」などでGoogle検索して出てくる方法で、レポート自体のコントロールに件数を表示させる方法もあったのですが、VBAで表示する前のレポートの表示後の件数を取得することができなかったのでその方法は使えませんでした。</p>
<p>今回紹介する方法はテーブルのデータを読み取ってレポートを表示する条件のレコードを取得する方法で、レポートの表示・非表示にかかわらず件数を取得できます。</p>
<h2><span id="toc3">レコードの件数を取得する2通りの方法について</span></h2>
<p>レコードの件数を取得する方法は関数を用いる方法とADOを使用する方法があります。</p>
<p>関数を使用する方法はピンポイントで件数だけを取得するのに手軽で便利な方法です。</p>
<p>逆にADOは参照設定や宣言が必要なので少しコードが複雑になりますが、件数の取得だけでなくレコードの検索・追加や全フィールドの値を取得したりなど、幅広い処理が可能です。</p>
<h2><span id="toc4">関数を使用する方法</span></h2>
<p>DCount関数を使用し、「DCount(&#8220;*&#8221;, &#8220;テーブル名&#8221;, &#8220;取得するレコードの条件&#8221;)」の記載方法で件数を取得します。</p>
<p>MsgboxやDebug.Printなどで出力すれば件数が表示できます。</p>
<p>DCount関数の最初の引数はフィールド名を記載するのが本来の使い方のようですが、「*」が使用できるので「*」を用いた方が汎用性があって便利です。</p>
<div class="VBACode">Private Sub 印刷_Click()<br />
<br />
<span class="VBA_Tab1">Me.Requery</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’[印刷する_2031]=にチェックがついているレコードがあればレポートをプレビュー表示する</span></span><br />
<span class="VBA_Tab1">If DCount(&#8220;*&#8221;, &#8220;T_POP&#8221;, &#8220;[印刷する_2031]=TRUE&#8221;) <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式20×31&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_2031]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’[印刷する_4031]=にチェックがついているレコードがあればレポートをプレビュー表示する</span></span><br />
<span class="VBA_Tab1">If DCount(&#8220;*&#8221;, &#8220;T_POP&#8221;, &#8220;[印刷する_4031]=TRUE&#8221;) <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式40×31&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_4031]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’[印刷する_4063]=にチェックがついているレコードがあればレポートをプレビュー表示する</span></span><br />
<span class="VBA_Tab1">If DCount(&#8220;*&#8221;, &#8220;T_POP&#8221;, &#8220;[印刷する_4063]=TRUE&#8221;) <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式40×63&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_4063]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
End Sub</div>
<h2><span id="toc5">ADOを使用する方法</span></h2>
<p>ADOを使用して、対象とするテーブルや選択クエリの件数を取得することができます。</p>
<p>ADOを使用する際はMicrosoft ActiveX Data Objects 〇〇 Libraryにチェックを入れる必要があります。</p>
<p>テーブルの中から特定の条件のレコード件数を取得するためには条件をSQLで指定します。</p>
<div class="VBACode">Private Sub 印刷_Click()<br />
<br />
<span class="VBA_Tab1">Me.Requery</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’Microsoft ActiveX Data Objects 〇〇 Libraryの参照設定にチェックを入れる</span></span><br />
<span class="VBA_Tab1">Dim RS(2) As ADODB.Recordset</span><br />
<span class="VBA_Tab2">Set RS(0) = New ADODB.Recordset</span><br />
<span class="VBA_Tab2">Set RS(1) = New ADODB.Recordset</span><br />
<span class="VBA_Tab2">Set RS(2) = New ADODB.Recordset</span><br />
<span class="VBA_Tab1">Dim CN As ADODB.Connection</span><br />
<span class="VBA_Tab2">Set CN = CurrentProject.Connection</span><br />
<br />
<span class="VBA_Tab1">Dim SQL(2) As String</span><br />
<span class="VBA_Tab2">SQL(0) = &#8220;SELECT [T_POP].* FROM [T_POP] WHERE ([T_POP].[印刷する_2031])=True;&#8221;</span><br />
<span class="VBA_Tab2">SQL(1) = &#8220;SELECT [T_POP].* FROM [T_POP] WHERE ([T_POP].[印刷する_4031])=True;&#8221;</span><br />
<span class="VBA_Tab2">SQL(2) = &#8220;SELECT [T_POP].* FROM [T_POP] WHERE ([T_POP].[印刷する_4063])=True;&#8221;</span><br />
<br />
<span class="VBA_Tab1">RS(0).Open SQL(0), CN, adOpenKeyset, adLockOptimistic</span><br />
<span class="VBA_Tab1">RS(1).Open SQL(1), CN, adOpenKeyset, adLockOptimistic</span><br />
<span class="VBA_Tab1">RS(2).Open SQL(2), CN, adOpenKeyset, adLockOptimistic</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’RS(0)のレコード件数が0でなければレポートを開いてプレビューを表示する</span></span><br />
<span class="VBA_Tab1">If RS(0).RecordCount <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式20×31&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_2031]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’RS(1)のレコード件数が0でなければレポートを開いてプレビューを表示する</span></span><br />
<span class="VBA_Tab1">If RS(1).RecordCount <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式40×31&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_4031]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
<span class="VBA_Tab1"><span class="VBA_Comment0">’RS(2)のレコード件数が0でなければレポートを開いてプレビューを表示する</span></span><br />
<span class="VBA_Tab1">If RS(2).RecordCount <> 0 Then</span><br />
<span class="VBA_Tab2">DoCmd.OpenReport &#8220;R_POP書式40×63&#8221;, acViewPreview, &#8220;&#8221;, &#8220;[印刷する_4063]=TRUE&#8221;, acWindowNormal</span><br />
<span class="VBA_Tab1">End If</span><br />
<br />
<span class="VBA_Tab1">RS(0).Close</span><br />
<span class="VBA_Tab1">RS(1).Close</span><br />
<span class="VBA_Tab1">RS(2).Close</span><br />
<span class="VBA_Tab1"></span><br />
<span class="VBA_Tab1">Set CN = Nothing</span><br />
<span class="VBA_Tab1">Set RS(0) = Nothing</span><br />
<span class="VBA_Tab1">Set RS(1) = Nothing</span><br />
<span class="VBA_Tab1">Set RS(2) = Nothing</span><br />
<br />
End Sub</div>
<p>ADOはテーブルやクエリの情報をすべて取得できるので関数で指定するよりもコードが長くなりますが、レコードを1件ずつ全て取得したり、細かく条件を設定して変換したり、レコードを新たに追加したり様々なことができるのでとても便利です。</p>
<p>イメージとしてはテーブルをExcelVBAでワークシートを操作するような感じで編集することが可能になる感じです。</p>
<p>ADOの使ってテーブルを追加したり編集したりする手順についてはまた別の機会にご紹介します。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://officevba.info/dcount-rsrecordcount/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
