<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Access | 文系出身のSEですが、何か</title>
	<atom:link href="https://loosecarrot.com/tag/access/feed/" rel="self" type="application/rss+xml" />
	<link>https://loosecarrot.com</link>
	<description>文系(国際系)出身でSE就職のサラリーマンが プログラミング・海外旅行・語学・健康などに関する情報を発信します</description>
	<lastBuildDate>Wed, 27 Sep 2023 12:36:49 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.8</generator>

<image>
	<url>https://loosecarrot.com/wp-content/uploads/2020/08/cropped-8214a4f1973e7caf419465b3dcc3ffd7-32x32.png</url>
	<title>Access | 文系出身のSEですが、何か</title>
	<link>https://loosecarrot.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">151273272</site>	<item>
		<title>ツール作成の問合せ こんなのあったらいいな</title>
		<link>https://loosecarrot.com/2020/06/13/4252/</link>
					<comments>https://loosecarrot.com/2020/06/13/4252/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sat, 13 Jun 2020 14:05:51 +0000</pubDate>
				<category><![CDATA[SE(システムエンジニア)]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4252</guid>

					<description><![CDATA[<p>「こんなのあったらいいな」の声をお届けください！ ・いろんな方に役立つツールを作ってみようと思います。 ・対応できないこともあるとは思いますが、ご相談ください。 ・ツール作成以外のお問合せは回答いたしません。</p>
The post <a href="https://loosecarrot.com/2020/06/13/4252/">ツール作成の問合せ こんなのあったらいいな</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-4253" src="https://loosecarrot.com/wp-content/uploads/2020/06/2ec5db26024ef075d5f7ec80491db176.png" alt="" width="800" height="400" />
<p>「こんなのあったらいいな」の声をお届けください！</p>
<div class="concept-box1">
<p><strong>・いろんな方に役立つツール</strong>を作ってみようと思います。</p>
<p>・<span style="color: #ff0000;">対応できないことも</span>あるとは思いますが、ご相談ください。</p>
<p>・ツール作成以外のお問合せは回答いたしません。</p>
</div>
[contact-form-7]The post <a href="https://loosecarrot.com/2020/06/13/4252/">ツール作成の問合せ こんなのあったらいいな</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/06/13/4252/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4252</post-id>	</item>
		<item>
		<title>VBA Access エクセル出力 色付け 罫線</title>
		<link>https://loosecarrot.com/2018/12/11/1847/</link>
					<comments>https://loosecarrot.com/2018/12/11/1847/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 10 Dec 2018 15:01:21 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1847</guid>

					<description><![CDATA[<p>Accessでテーブルからのデータ出力とエクセルのセルの背景色を設定する方法についての備忘録です。 実際に作ったファイルはこちらからダウンロードできます。 出力結果も載せているので、解説と合わせて見ていただければと思いま</p>
The post <a href="https://loosecarrot.com/2018/12/11/1847/">VBA Access エクセル出力 色付け 罫線</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>Accessで<span style="color: #ff0000;">テーブルからのデータ出力</span>とエクセルの<span style="color: #ff0000;">セルの背景色を設定する方法</span>についての備忘録です。</p>
<p>実際に作ったファイルは<a href="https://www.dropbox.com/scl/fi/7vlxs2a1xw6zuxct2lzuq/ExportExcelFromAccess-ColorAndRuledLine.zip?rlkey=0pi6qn8a8pkklwq39pxtpthh6&amp;dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>出力結果も載せているので、解説と合わせて見ていただければと思います。</p>
<h2 id="01">エクセル参照設定</h2>
<p>まずAccessファイルにエクセルを取り込むときに、エクセルを操作しなければなりません。</p>
<p>そのため、エクセル操作ができるよう参照設定を行います。</p>
<p>手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。</p>
<p>その後、Microsoft Excel 16.0 Object Libraryを追加してください。</p>
<p>16.0はバージョンに寄ります。</p>
<a href="https://loosecarrot.com/2018/11/26/1510/%e3%82%a8%e3%82%af%e3%82%bb%e3%83%ab%e5%8f%82%e7%85%a7%e8%a8%ad%e5%ae%9a/" rel="attachment wp-att-1523"><img decoding="async" class="alignnone size-full wp-image-1523" src="https://loosecarrot.com/wp-content/uploads/2018/11/019ecee378ce6a07ef5c5add573cc4ee.png" alt="" width="461" height="319" /></a>
<h2 id="02">エクセルの色付け 罫線引きサンプルコード</h2>
<p>ボタンクリック後のメイン処理を記載します。</p>
<p>処理の流れは以下です。</p>
<div class="simple-box3">
<p>①レコードセットにテーブルデータを取得<br />
②エクセル出力<br />
③色、罫線を付ける<br />
④保存する</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================================
'処理　　　 ：Excel出力ボタン押下時
'==============================================
Private Sub ExportExcel_Click()

　　Dim db As DAO.Database　　　　　　　　　　　　　　　　'DBの変数
　　Dim RS_Supplier As DAO.Recordset　　　　　　　　　　'レコードセット
　　Dim MyDir As String　　　　　　　　　　　　　　　　　　'ツールが存在しているディレクトリ
　　
　　'DBをセット
　　Set db = CurrentDb
　　
　　'自分の配置されているパスを取得
　　MyDir = Application.CurrentProject.Path
　　
　　'レコードセットへテーブルのデータを取得
　　Set RS_Supplier = db.OpenRecordset(GetSupplier())
　　
　　'空エクセルファイルを開く
　　Workbooks.Open (MyDir &amp; "\nothing.xlsx")

　　'アラート表示をオフにする
　　ActiveWorkbook.Application.DisplayAlerts = False

　 '列名をエクセルに出力
　　Call SetRsColValue(ActiveSheet, RS_Supplier, 1, 1)
　　
　 'レコードセットをエクセルに出力
　　Call SetRsValue(ActiveSheet, RS_Supplier, 2, 1)
　　
　　'ヘッダーの色を付ける
　　ActiveSheet.Range(Cells(1, 1), Cells(1, RS_Supplier.Fields.Count)).Interior.Color = RGB(204, 204, 204)
　　
　　'2～3列目の色を付ける
　　ActiveSheet.Range(Cells(2, 2), Cells(RS_Supplier.RecordCount + 1, 3)).Interior.Color = RGB(221, 235, 247)
　　
　　'罫線を引く
　　ActiveSheet.Range(Cells(1, 1), Cells(RS_Supplier.RecordCount + 1, RS_Supplier.Fields.Count)).Borders.LineStyle = xlContinuous
　　
　　'列幅を調節
　　ActiveSheet.Range(Cells(1, 1), Cells(RS_Supplier.RecordCount + 1, RS_Supplier.Fields.Count)).EntireColumn.AutoFit
　　
　 'エクセル保存
　　ActiveWorkbook.SaveAs FileName:=MyDir &amp; "\RS_Supplier.xlsx"

　　'エクセルを閉じる
　　ActiveWorkbook.Close
　　
　　'レコードセットを開放
　　Set RS_Supplier = Nothing
　　
　　MsgBox "出力完了しました。"

End Sub</pre><p></p>
<h3>解説</h3>
<p>列名とテーブルデータをエクセルに出力する箇所は次で説明します。</p>
<h4>ヘッダーの色を付ける</h4>
<p>色付けする範囲をRangeで指定しています。</p>
<p><span class="crayon-sy">A1セル～A6セルまでに色を付けています。</span></p>
<p>範囲の開始位置は<span class="crayon-e">Cells</span><span class="crayon-sy">(</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span> <span class="crayon-cn">1</span><span class="crayon-sy">)です。</span></p>
<p>範囲の終了位置はレコードセットの列数で指定しています。</p>
<p>なので、このロジックであれば列数が増えても<span style="color: #ff0000;">汎用的</span>に色付けできます。</p>
<h4>2～3列目の色を付ける</h4>
<p>こちらもRange指定でB2～C16までを色付けしています。</p>
<p><span class="crayon-e">範囲の開始位置はCells</span><span class="crayon-sy">(</span><span class="crayon-cn">2</span><span class="crayon-sy">,</span> <span class="crayon-cn">2</span><span class="crayon-sy">)でB2を指定しています。</span></p>
<p>範囲の終了位置は<span class="crayon-e">Cells</span><span class="crayon-sy">(</span><span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">RecordCount</span> <span class="crayon-o">+</span> <span class="crayon-cn">1</span><span class="crayon-sy">,</span> <span class="crayon-cn">3</span><span class="crayon-sy">)でC16を指定しています。</span></p>
<p><span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">RecordCount</span> <span class="crayon-o">+</span> <span class="crayon-cn">1で範囲の<span style="color: #ff0000;">最終行</span>と同じ数字になります。</span></p>
<p>レコードセットのデータは列含まないため+1しないといけません。</p>
<p><span class="crayon-cn">そのためテーブルデータの行数＋１をしています。</span></p>
<p>これもテーブルの行数が増えても<span style="color: #ff0000;">汎用的</span>に使えます。</p>
<h4>罫線を引く</h4>
<p>こちらもRange指定でA1～F16までを色付けしています。</p>
<p><span class="crayon-e">Cells</span><span class="crayon-sy">(</span><span class="crayon-cn">1</span><span class="crayon-sy">,</span> <span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span> <span class="crayon-e">Cells</span><span class="crayon-sy">(</span><span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">RecordCount</span> <span class="crayon-o">+</span> <span class="crayon-cn">1</span><span class="crayon-sy">,</span> <span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">Fields</span><span class="crayon-sy">.</span><span class="crayon-v">Count</span><span class="crayon-sy">)</span></p>
<p><span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">RecordCount</span> <span class="crayon-o">+</span> <span class="crayon-cn">1で行数</span></p>
<p><span class="crayon-v">RS_Supplier</span><span class="crayon-sy">.</span><span class="crayon-v">Fields</span><span class="crayon-sy">.</span><span class="crayon-v">Countで列数になるため、データがある範囲を対象にすることができます。</span></p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/#01-2">https://loosecarrot.com/2018/12/09/1800/#01-2</a></p>
<h2 id="03">テーブルのエクセル出力</h2>
<h3>列名のエクセル出力</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================================
'目的　　　 ：エクセルのセルへ列名をセットする
'引数　　　 ：Worksheet　　　 対象シート
'　　　　　 ：rs　　　　　　　 レコードセット
'　　　　　 ：StartRow　　　　出力する行
'　　　　　 ：StartCol　　　　出力開始のカラム
'戻り値　　 : 選択したファイルパス
'==============================================
Public Sub SetRsColValue(WS As WorkSheet, ByVal rs As DAO.Recordset, StartRow As Long, StartCol As Long)
　　Dim ExcelCol As Long
　　Dim RsCol As Long
　　　　
　　With WS

　　　　' 全列をシートに展開
　　　　For RsCol = 0 To rs.Fields.Count - 1
　　　　　　.Cells(StartRow, StartCol).Value = rs.Fields(RsCol).Name
　　　　　　StartCol = StartCol + 1
　　　　Next RsCol
　　
　　End With
　　
　　Set rs = Nothing
　　
End Sub</pre><p></p>
<h4>解説</h4>
<p>エクセルの出力開始の行番号と列番号をStartRowとStartCol で引数で受取ります。</p>
<p>その後、列数分ループしながら列名を順番に出力する処理になっています。</p>
<h3>RecordSetデータのエクセル出力</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================================
'目的　　　 ：エクセルのセルへ値をセットする
'引数　　　 ：Worksheet　　　 対象シート
'　　　　　 ：rs　　　　　　　 レコードセット
'　　　　　 ：StartRow　　　　出力する行
'　　　　　 ：StartCol　　　　出力開始のカラム
'戻り値　　 : 選択したファイルパス
'==============================================
Public Sub SetRsValue(WS As WorkSheet, ByVal rs As DAO.Recordset, StartRow As Long, StartCol As Long)
　　Dim Row As Long
　　Dim ExcelCol As Long
　　Dim RsCol As Long
　　
　　rs.MoveFirst
　　
　　With WS
　　
　　　　'出力開始行をセット
　　　　Row = StartRow
　　　　
　　　　' 先頭レコードからEOFまで繰り返す
　　　　Do Until rs.EOF
　　　　
　　　　　　'列を先頭に戻す
　　　　　　ExcelCol = StartCol
　　　　　　
　　　　　　' 全列をシートに展開
　　　　　　For RsCol = 0 To rs.Fields.Count - 1
　　　　　　　　.Cells(Row, ExcelCol).Value = rs.Fields(RsCol).Value
　　　　　　　　ExcelCol = ExcelCol + 1
　　　　　　Next RsCol
　　　　　　
　　　　　　'行を加算
　　　　　　Row = Row + 1
　　　　　　
　　　　　　'次のレコードへ
　　　　　　rs.MoveNext
　　　　Loop
　　End With
　　
　　Set rs = Nothing
　　
End Sub</pre><p></p>
<h4>解説</h4>
<p>列出力と同様に、エクセルの出力開始の行番号と列番号をStartRowとStartCol で引数で受取ります。</p>
<p>出力開始位置から1セルずつ、右に移動しながら出力していきます。</p>
<p>1ループ(1行分)終了すると次の行へ出力していきます。</p>
<h4>出力結果</h4>
<p>出力結果はこんな風になります。</p>
<a style="font-size: 1em; letter-spacing: 0.05em;" href="https://loosecarrot.com/2018/12/12/1847/%e3%82%a8%e3%82%af%e3%82%bb%e3%83%ab%e8%89%b2%e7%bd%ab%e7%b7%9a-2/" rel="attachment wp-att-1863"><br /><img decoding="async" class="alignnone size-full wp-image-1863" src="https://loosecarrot.com/wp-content/uploads/2018/12/48f8995c9a67b8b024ea77d14e7c6502-1.png" alt="" width="751" height="509" /></a>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>
<div class="concept-box5">
<p>・Web Safe Color (カラーチャート)<br />
<a href="https://www.scollabo.com/banban/lectur/websafe.html">https://www.scollabo.com/banban/lectur/websafe.html</a><br />
・参照渡しと値渡し<br />
<a href="http://officetanaka.net/excel/vba/tips/tips94.htm">http://officetanaka.net/excel/vba/tips/tips94.htm</a><br />
・セルの内容に合わせて列幅/高さを自動調整する<br />
<a href="https://www.moug.net/tech/exvba/0050001.html">https://www.moug.net/tech/exvba/0050001.html</a><br />
・【エクセルVBA】表の罫線を引く場所を指定する簡単な方法<br />
<a href="https://tonari-it.com/excel-vba-borders/#toc2">https://tonari-it.com/excel-vba-borders/#toc2</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/12/11/1847/">VBA Access エクセル出力 色付け 罫線</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/12/11/1847/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1847</post-id>	</item>
		<item>
		<title>Access VBA ダイアログからパス取得</title>
		<link>https://loosecarrot.com/2018/11/28/1511/</link>
					<comments>https://loosecarrot.com/2018/11/28/1511/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Tue, 27 Nov 2018 22:50:02 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1511</guid>

					<description><![CDATA[<p>VBAでファイルダイアログを開く処理について紹介します。 実際に作ったファイルはこちらからダウンロードできます。 ダイアログ用の参照設定 ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。 手順はコードエディ</p>
The post <a href="https://loosecarrot.com/2018/11/28/1511/">Access VBA ダイアログからパス取得</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>VBAでファイルダイアログを開く処理について紹介します。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/17677356" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h2 id="01">ダイアログ用の参照設定</h2>
<p>ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。</p>
<p>手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。</p>
<p>その後、Microsoft Office 16.0 Object Libraryにチェックを付けておいてください。</p>
<p>16.0はバージョンに寄ります。</p>
<a href="https://loosecarrot.com/2018/11/28/1511/%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%83%80%e3%82%a4%e3%82%a2%e3%83%ad%e3%82%b0%e5%8f%82%e7%85%a7%e8%a8%ad%e5%ae%9a/" rel="attachment wp-att-1534"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1534" src="https://loosecarrot.com/wp-content/uploads/2018/11/d5efbb205996b7460b0162060d8f4125.png" alt="" width="461" height="319" /></a>
<h2 id="02">ファイルパス取得のダイアログ コード</h2>
<p>ファイルパス取得用のダイアログは以下のような書き方です。</p>
<p>処理の流れは以下の順です。</p>
<div class="simple-box3">
<p>①ファイルダイアログを開く<br />
②ファイルが選択されてらばパスをメッセージ表示<br />
③選択されなければキャンセルのメッセージ表示</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'=======================================
'目的　　　 ：選択したファイルのフルパスを取得
'=======================================
Private Sub GetFilePath_Click()

　　'変数定義
　　Dim intRet As Integer　　　　 'ダイアログ用変数
　　Dim FilePath As String　　　　 'フルパス用変数

　　With Application.FileDialog(msoFileDialogOpen)
　　　　.Title = "取込みファイル設定ダイアログ"
　　　　.Filters.Clear
　　　　.Filters.Add "Microsoft Office Excelファイル", "*.xls,*.xlsx,*.xlsm"
　　　　.FilterIndex = 1
　　　　
　　　　'複数ファイル選択を許可しない
　　　　.AllowMultiSelect = False
　　　　
　　　　'初期パスを設定
　　　　.InitialFileName = CurrentProject.Path
　　　　
　　　　'ダイアログを表示
　　　　intRet = .Show

　　　　'ファイルが選択された場合
　　　　If intRet &lt;&gt; 0 Then
　　　　　'パスを設定
　　　　　FilePath = Trim(.SelectedItems.Item(1))

　　　　　'パスを表示
　　　　　MsgBox FilePath
　　　　　
　　　　Else
　　　　　'ファイルが選択されていない場合
　　　　　MsgBox "キャンセルしました。"
　　　　　
　　　　End If
　　　　
　　End With
　　　　
End Sub</pre><p>&nbsp;</p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/">https://loosecarrot.com/2018/12/09/1800/</a></p>
<h3>解説</h3>
<p>FileDialogのShowでダイアログを出します。</p>
<p>ダイアログで選択したファイルがある場合intRetには結果引数として「-1」が返ってきます。</p>
<p>ファイルを選択しなかった場合、「0」が結果引数として返ってきます。</p>
<p>ファイルを選択した場合、SelectedItems.Item(1)にファイルのパスが取得されます。</p>
<p>例えば、ダイアログから取得したファイルパスを使ってエクセルをAccessに取込むというような処理に使えそうですね。</p>
<p><a href="https://loosecarrot.com/2018/11/26/1510/">https://loosecarrot.com/2018/11/26/1510/</a></p>
<h3>補足</h3>
<p><strong>・フィルタ設定</strong></p>
<p>エクセル関係のファイルだけしか表示されないようにしています。</p>
<p>用途によっては「*」でも良いでしょう。</p>
<p><strong>・複数ファイル選択許可</strong></p>
<p>1ファイルだけに設定していますが、複数も可能です。</p>
<p>その場合、FilePath = Trim(.SelectedItems.Item(<span style="color: #ff0000;">1</span>))の番号は選択したファイル番号を設定する必要があります。</p>
<h2 id="03">フォルダのパス取得のダイアログ コード</h2>
<p>フォルダパス取得用のダイアログは以下のような書き方です。</p>
<p>処理の流れは以下の順です。</p>
<div class="simple-box3">
<p>①ダイアログを開く<br />
②フォルダが選択されてればパスをメッセージ表示<br />
③選択されなければキャンセルのメッセージ表示</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'=======================================
'目的　　　 ：選択したフォルダのパスを取得
'=======================================
Private Sub GetFolderPath_Click()

　　Dim FolderPath As String　　　'フォルダパス用変数
　　
　　'ファイルダイアログを開く
　　With Application.FileDialog(msoFileDialogFolderPicker)
　　　　If .Show = True Then
　　　　　　'パスを設定
　　　　　　FolderPath = .SelectedItems(1)
　　　　　　
　　　　　　'パスを表示
　　　　　　MsgBox FolderPath
　　　　End If
　　　　
　　　　'フォルダが選択されていない場合
　　　　If FolderPath = "" Then
　　　　
　　　　　　MsgBox "キャンセルしました。"
　　　　　　
　　　　End If
　　　　
　　End With
　　
End Sub</pre><p>&nbsp;</p>
<h3>解説</h3>
<p>FileDialogのShowでダイアログを出します。(ファイルパス取得と同じ)</p>
<p>ダイアログで選択した場合、Trueが返ってきます。</p>
<p>Trueの場合、SelectedItems(1)に選択したフォルダのパスがセットされています。</p>
<p>なので、FolderPathの変数に選択したパスをセットしています。</p>
<p>ロジックとしてFolderPathに何も入っていない場合、フォルダ選択をやめる以外はありません。</p>
<p>そのため、FolderPathが空白ならキャンセルされましたと表示をしています。</p>
<p>例えば、ダイアログを表示して指定したフォルダにAccessからtsvやcsvを出力するときなどに使えそうですね。</p>
<p><a href="https://loosecarrot.com/2018/11/20/1459/">https://loosecarrot.com/2018/11/20/1459/</a></p>
<h3>補足</h3>
<p><strong>・複数フォルダ選択</strong></p>
<p>複数フォルダ選択はできないようです。</p>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>
<div class="concept-box5">
<p>・3種類の[ファイルを開く]ダイアログボックス<br />
<a href="http://officetanaka.net/excel/vba/tips/tips154.htm">http://officetanaka.net/excel/vba/tips/tips154.htm</a><br />
・[ファイルを開く]ダイアログボックスを表示する（GetOpenFilenameメソッド）<br />
<a href="https://www.moug.net/tech/exvba/0060013.html">https://www.moug.net/tech/exvba/0060013.html</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/11/28/1511/">Access VBA ダイアログからパス取得</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/28/1511/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1511</post-id>	</item>
		<item>
		<title>Access エクセル取込み 複数シート</title>
		<link>https://loosecarrot.com/2018/11/26/1510/</link>
					<comments>https://loosecarrot.com/2018/11/26/1510/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 25 Nov 2018 15:00:18 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1510</guid>

					<description><![CDATA[<p>Accessに複数シートをのエクセルを一括で取り込める機能が欲しかったのですが、ありませんでした。 作ってみたので残しておきます。 実際に作ったファイルはこちらからダウンロードできます。 エクセル取込み #8211;</p>
The post <a href="https://loosecarrot.com/2018/11/26/1510/">Access エクセル取込み 複数シート</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>Accessに複数シートをのエクセルを一括で取り込める機能が欲しかったのですが、ありませんでした。</p>
<p>作ってみたので残しておきます。</p>
<p>実際に作ったファイルは<a href="https://base-shop.loosecarrot.com/items/21210619" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h2 id="01">エクセル取込み &#8211; エクセル参照設定</h2>
<p>まずAccessファイルにエクセルを取り込むときに、エクセルを操作しなければなりません。</p>
<p>そのため、エクセル操作ができるよう参照設定を行います。</p>
<p>手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。</p>
<p>その後、Microsoft Excel 16.0 Object Libraryを追加してください。</p>
<p>16.0はバージョンに寄ります。</p>
<a href="https://loosecarrot.com/2018/11/26/1510/%e3%82%a8%e3%82%af%e3%82%bb%e3%83%ab%e5%8f%82%e7%85%a7%e8%a8%ad%e5%ae%9a/" rel="attachment wp-att-1523"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1523" src="https://loosecarrot.com/wp-content/uploads/2018/11/019ecee378ce6a07ef5c5add573cc4ee.png" alt="" width="461" height="319" /></a>
<h2 id="02">エクセル取込みのコード</h2>
<p>処理の流れは以下の順です。</p>
<div class="simple-box3">
<p>①ファイルダイアログを開いて取込むエクセルを選択<br />
②エクセルのシート名を取得<br />
③シート毎にテーブルに取込む</p>
</div>
<p><span style="color: #ff0000;">※1テーブルをAccessに作っておく必要があります。</span><br />
<span style="color: #ff0000;">※2テーブル名とシート名は同じ必要があります。</span></p>
<p><a href="https://loosecarrot.com/2018/11/28/1511/">https://loosecarrot.com/2018/11/28/1511/</a></p><pre class="urvanov-syntax-highlighter-plain-tag">'=======================================
'目的　　　 ：エクセルデータをインポートする
'=======================================
Private Sub ImportExcel_Click()

　　Dim MyDir As String
　　Dim InputFilePath As String
　　Dim i As Long
　　Dim mySheetCnt As Long
　　Dim SheetNames() As String
　　Dim wb As Workbook
　　
　　'自分の配置されているパスを取得
　　MyDir = Application.CurrentProject.Path
　　
　　'①----------ファイルダイアログを開いて取込むエクセルのパスを取得する----------
　　'取込みファイルパスを取得
　　InputFilePath = GetFilePath()
　　
　　'アラート表示をオフにする
　　DoCmd.SetWarnings False
　　
　　'取得パスが空白でなければ処理開始
　　If InputFilePath &lt;&gt; "" Then
　　
　　　　'②----------エクセルのシート名を取得----------
　　　　'エクセルを開く
　　　　Workbooks.Open (InputFilePath)
　　　　Set wb = ActiveWorkbook
　　　　
　　　　'配列の数を再定義
　　　　ReDim SheetNames(ActiveWorkbook.Sheets.Count)
　　　　
　　　　'シートを配列に取得
　　　　For i = 1 To ActiveWorkbook.Sheets.Count
　　　　　　SheetNames(i) = ActiveWorkbook.Sheets(i).Name
　　　　Next i
　　　　
　　　　'エクセルを閉じる
　　　　wb.Close False
　　　　
　　　　'③----------エクセルのシートを全て取り込む----------
　　　　'シート分取込みを実行
　　　　For i = 1 To UBound(SheetNames)
　　　　
　　　　　　'シート名がテーブル名に存在する場合、取込む　存在しない場合、スキップ
　　　　　　If DCount("*", "MSysObjects", "[Name]='" &amp; SheetNames(i) &amp; "'") &gt; 0 Then
　　　　　　　　'対象テーブルを削除
　　　　　　　　DoCmd.RunSQL "DELETE * FROM " &amp; SheetNames(i)
　　　　　　　　
　　　　　　　　'各マスタテーブルへエクセルデータを取込む
　　　　　　　　DoCmd.TransferSpreadsheet _
　　　　　　　　　　acImport, _
　　　　　　　　　　acSpreadsheetTypeExcel12Xml, _
　　　　　　　　　　SheetNames(i), _
　　　　　　　　　　InputFilePath, _
　　　　　　　　　　True, _
　　　　　　　　　　SheetNames(i) &amp; "!"
　　　　　　 End If
　　　　Next i

　　　　MsgBox "取込みが完了しました。"
　　Else
　　　　MsgBox "取込をキャンセルしました。"
　　End If
　　
End Sub</pre><p></p>
<h3>補足</h3>
<p>４９行目のテーブルデータ削除についてです。</p>
<p>以下の処理で一度テーブルデータを一括削除してからテーブルに取込んでいます。</p>
<p>削除しないとどんどん行数が増え続けていくためです。</p>
<h4>DoCmd.RunSQL &#8220;DELETE * FROM &#8221; &amp; SheetNames(i)の中身</h4>
<p>指定したテーブル名を引数に受け取っています。</p>
<p>そして指定したテーブルのレコードすべてを削除するようにしています。</p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/">https://loosecarrot.com/2018/12/09/1800/</a></p>
<h2 id="03">エクセル取込み時に255文字で切れる</h2>
<p>一つ問題がありました。</p>
<p>この処理だけでは文字数が255を超える場合、文字が切れてしまう可能性があります。</p>
<p>たとえ、文字型を「長いテキスト」にしたとしてもです。</p>
<p>長いテキストにすれば1GB分まで格納できるはずなのですが、なぜ?と思っていました。</p>
<p>原因は<span style="color: #ff0000;">最初の8行が255文字以上でない</span>と、自動でMAX文字数を255とAccess側で判断してしまうためだそうです。</p>
<p>この対応は他で行って公開できればと思います。</p>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>
<div class="concept-box5">
<p>・xserver アクセスログ取得方法<br />
<a href="https://www.xserver.ne.jp/manual/man_server_log.php">https://www.xserver.ne.jp/manual/man_server_log.php</a><br />
・Access2016で長いテキスト型でインポートエラー<br />
<a href="https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_access-mso_winother/access2016%E3%81%A7%E9%95%B7%E3%81%84%E3%83%86/9e9d4345-0a9a-4004-9038-1da0150cf835?page=2">https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_access-mso_winother/access2016%E3%81%A7%E9%95%B7%E3%81%84%E3%83%86/9e9d4345-0a9a-4004-9038-1da0150cf835?page=2</a><br />
・もう一度学ぶMS-Access データ型<br />
<a href="https://www.accessdbstudy.net/entry/20141027/p1#04020">https://www.accessdbstudy.net/entry/20141027/p1#04020</a><br />
・AccessVBAでテーブルを削除する３つの方法！コピペでOK！<br />
<a href="https://eijiman.com/access-vba-table-delete/">https://eijiman.com/access-vba-table-delete/</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/11/26/1510/">Access エクセル取込み 複数シート</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/26/1510/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1510</post-id>	</item>
		<item>
		<title>Access SQL 複数(2,3,4)テーブルの結合(JOIN)</title>
		<link>https://loosecarrot.com/2018/11/24/1497/</link>
					<comments>https://loosecarrot.com/2018/11/24/1497/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Fri, 23 Nov 2018 15:01:26 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1497</guid>

					<description><![CDATA[<p>Accessで複数テーブルを結合する時に、書き方が分からず苦労しました。 他のサイトでも3テーブルの結合までは書いていたのですが、4つ以上の書き方がありませんでした。 備忘録として残しておきます。 実際に作ったファイルは</p>
The post <a href="https://loosecarrot.com/2018/11/24/1497/">Access SQL 複数(2,3,4)テーブルの結合(JOIN)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>Accessで複数テーブルを結合する時に、書き方が分からず苦労しました。</p>
<p>他のサイトでも3テーブルの結合までは書いていたのですが、4つ以上の書き方がありませんでした。</p>
<p>備忘録として残しておきます。</p>
<p>実際に作ったファイルは<a href="https://www.dropbox.com/scl/fi/lcwyvvvs6f7z9csrgaxbu/AccessJoinMultipleTables.zip?rlkey=8fdzc5z9gzfz19u2ryko5g9to&amp;dl=1" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<p>SQLの知識が必要なので、<a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">ゼロからはじめるデータベース操作</a>がおすすめです。</p>
<h2 id="01">Access SQLで2テーブルの結合</h2>
<p>2つのテーブルを結合する場合の書き方です。</p>
<p>GoodsテーブルとRecipeテーブルを結合する場合を例にします。</p>
<h3>抽出元</h3>
<p>■Goodsテーブル</p>
<table style="border-collapse: collapse; width: 414px; height: 36px;" border="0" width="288" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 54pt;" span="4" width="72" /> </colgroup>
<tbody>
<tr style="height: 18.75pt;">
<td style="height: 18px; width: 86px; border-color: #000000; background-color: #6cc4ae;" height="25">Goods_cd</td>
<td style="width: 134px; border-color: #000000; background-color: #6cc4ae; height: 18px;">Goods_name</td>
<td style="width: 59px; border-color: #000000; background-color: #6cc4ae; height: 18px;">price</td>
<td style="width: 66px; border-color: #000000; background-color: #6cc4ae; height: 18px;">calorry</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 86px;" align="right" height="25">101004</td>
<td style="border-color: #000000; width: 134px; height: 18px;">ビーフカツランチ</td>
<td style="border-color: #000000; width: 59px; height: 18px;" align="right">880</td>
<td style="border-color: #000000; width: 66px; height: 18px;" align="right">0</td>
</tr>
</tbody>
</table>
<p>■Recipeテーブル</p>
<table style="border-collapse: collapse; width: 386px; height: 216px;" border="0" width="216" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 54pt;" span="3" width="72" /> </colgroup>
<tbody>
<tr style="height: 18.75pt;">
<td style="height: 18px; width: 96px; border-color: #000000; background-color: #6cc4ae;" height="25">goods_cd</td>
<td style="width: 81px; border-color: #000000; height: 18px; background-color: #6cc4ae;">food_cd</td>
<td style="width: 157px; border-color: #000000; height: 18px; background-color: #6cc4ae;">necessary_num</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201110</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">5</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201111</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">5</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201112</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">10</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201114</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">30</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201115</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">5</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201116</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">10</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201124</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">50</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201143</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">5</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201145</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">120</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201146</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">5</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18px; border-color: #000000; width: 96px;" align="right" height="25">101004</td>
<td style="border-color: #000000; height: 18px; width: 81px;" align="right">201147</td>
<td style="border-color: #000000; height: 18px; width: 157px;" align="right">50</td>
</tr>
</tbody>
</table>
<h3>SQL</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
 Goods.Goods_cd
,Goods.Goods_name
,Goods.price
,Recipe.food_cd
,Recipe.necessary_num
FROM Goods

LEFT JOIN Recipe
ON (Goods.Goods_cd = Recipe.goods_cd)

WHERE Goods.Goods_cd = 101004</pre><p>ポイントとしては、</p>
<p>LEFT JOIN Recipe ON <span style="color: #ff0000;"><strong>(</strong></span>Goods.Goods_cd = Recipe.goods_cd<span style="color: #ff0000;"><strong>)</strong></span></p>
<p>のようにON以降を()で囲む必要があることです。</p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/">https://loosecarrot.com/2018/12/09/1800/</a></p>
<h2 id="02">Access SQLで3テーブルの結合</h2>
<p>3つのテーブルを結合する場合の書き方です。</p>
<p>先ほどのGoodsテーブルとRecipeテーブルに加えて、</p>
<p>Foodsテーブルを結合する場合を例にします。</p>
<h3>抽出元</h3>
<p>■Foodsテーブル</p>
<table style="border-collapse: collapse; width: 471px; height: 449px;" border="0" width="216" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 54pt;" span="3" width="72" /> </colgroup>
<tbody>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; background-color: #6cc4ae; border-color: #000000;" height="25">foods_cd</td>
<td style="width: 149px; background-color: #6cc4ae; border-color: #000000;">ｆoods_name</td>
<td style="width: 154px; background-color: #6cc4ae; border-color: #000000;">supplier_cd</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201110</td>
<td style="width: 149px; border-color: #000000;">濃口しょうゆ</td>
<td style="width: 154px; border-color: #000000;" align="right">301200</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201111</td>
<td style="width: 149px; border-color: #000000;">ウスターソース</td>
<td style="width: 154px; border-color: #000000;" align="right">301200</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201112</td>
<td style="width: 149px; border-color: #000000;">中濃ソース</td>
<td style="width: 154px; border-color: #000000;" align="right">301200</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201114</td>
<td style="width: 149px; border-color: #000000;">サラダ油</td>
<td style="width: 154px; border-color: #000000;" align="right">301107</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201115</td>
<td style="width: 149px; border-color: #000000;">ゴマ油</td>
<td style="width: 154px; border-color: #000000;" align="right">301107</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201116</td>
<td style="width: 149px; border-color: #000000;">ラード</td>
<td style="width: 154px; border-color: #000000;" align="right">301106</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201124</td>
<td style="width: 149px; border-color: #000000;">冷凍ほうれん草</td>
<td style="width: 154px; border-color: #000000;" align="right">301103</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201143</td>
<td style="width: 149px; border-color: #000000;">パセリ</td>
<td style="width: 154px; border-color: #000000;" align="right">301103</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201145</td>
<td style="width: 149px; border-color: #000000;">牛ロース肉</td>
<td style="width: 154px; border-color: #000000;" align="right">301108</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201146</td>
<td style="width: 149px; border-color: #000000;">トマトケチャップ</td>
<td style="width: 154px; border-color: #000000;" align="right">301200</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 116px; border-color: #000000;" align="right" height="25">201147</td>
<td style="width: 149px; border-color: #000000;">ナチュラルポテト</td>
<td style="width: 154px; border-color: #000000;" align="right">301103</td>
</tr>
</tbody>
</table>
<h3>SQL</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
Goods.Goods_cd
,Goods.Goods_name
,Goods.price
,Recipe.food_cd
,Foods.ｆoods_name
,Foods.supplier_cd

FROM (Goods

LEFT JOIN Recipe 
ON (Goods.Goods_cd = Recipe.goods_cd))

LEFT JOIN Foods
ON (Recipe.food_cd = Foods.foods_cd)

WHERE Goods.Goods_cd = 101004</pre><p>ポイントはFROM直後～一つ目のJOINが終わるところまでを()で囲むところです。</p>
<p>FROM <strong><span style="color: #ff0000;">(</span></strong>Goods<br />
LEFT JOIN Recipe<br />
ON <strong><span style="color: #0000ff;">(</span></strong>Goods.Goods_cd = Recipe.goods_cd<strong><span style="color: #0000ff;">)</span></strong><span style="color: #ff0000;"><strong>)</strong></span></p>
<p>&nbsp;</p>
<p><a href="https://loosecarrot.com/2018/11/20/1459/">https://loosecarrot.com/2018/11/20/1459/</a></p>
<h2 id="03">Access SQLで4テーブルの結合</h2>
<p>3つのテーブルを結合する場合の書き方です。</p>
<p>先ほどのGoodsテーブル、Recipeテーブル、Foodsテーブルに加えて、</p>
<p>Supplierテーブルを結合する場合を例にします。</p>
<h3>抽出元</h3>
<p>■Supplierテーブル</p>
<table style="border-collapse: collapse; width: 340px; height: 222px;" border="0" width="360" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 54pt;" span="5" width="72" /> </colgroup>
<tbody>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; background-color: #6cc4ae; border-color: #000000;" height="25">supplier_cd</td>
<td style="width: 185px; background-color: #6cc4ae; border-color: #000000;">supplier_name</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; border-color: #000000;" align="right" height="25">301103</td>
<td style="width: 185px; border-color: #000000;">ライヘルフ</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; border-color: #000000;" align="right" height="25">301106</td>
<td style="width: 185px; border-color: #000000;">流通パートナーズ</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; border-color: #000000;" align="right" height="25">301107</td>
<td style="width: 185px; border-color: #000000;">全食</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; border-color: #000000;" align="right" height="25">301108</td>
<td style="width: 185px; border-color: #000000;">大地</td>
</tr>
<tr style="height: 18.75pt;">
<td style="height: 18.75pt; width: 120px; border-color: #000000;" align="right" height="25">301200</td>
<td style="width: 185px; border-color: #000000;">キッコーマン</td>
</tr>
</tbody>
</table>
<h3>SQL</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">SELECT
Goods.Goods_cd
,Goods.Goods_name
,Goods.price
,Recipe.food_cd
,Foods.ｆoods_name
,Foods.supplier_cd
,Supplier.supplier_cd
,Supplier.supplier_name

FROM ((Goods

LEFT JOIN Recipe 
ON (Goods.Goods_cd = Recipe.goods_cd))

LEFT JOIN Foods
ON (Recipe.food_cd = Foods.foods_cd))

LEFT JOIN Supplier
ON (Foods.supplier_cd = Supplier.supplier_cd)

WHERE Goods.Goods_cd = 101004</pre><p>ポイントはFROM直後～二つ目のJOINが終わるところまでを()で囲むところです。</p>
<p>FROM <span style="color: #ff0000;"><strong>(</strong></span><span style="color: #0000ff;"><strong>(</strong></span>Goods<br />
LEFT JOIN Recipe<br />
ON <strong><span style="color: #339966;">(</span></strong>Goods.Goods_cd = Recipe.goods_cd<strong><span style="color: #339966;">)</span><span style="color: #0000ff;">)</span></strong><br />
LEFT JOIN Foods<br />
ON (Recipe.food_cd = Foods.foods_cd)<span style="color: #ff0000;"><strong>)</strong></span></p>
<h2 id="04">結合テーブルが増えた時の書き方パターン</h2>
<p>結合するテーブル数が5、6、7&#8230;と増えても<strong>()</strong>で囲む数が増えていくだけです。</p>
<p>2,3,4テーブルはすべてテーブル単位の()に色付けして分かりやすくしています。</p>
<p>これを覚えておけば問題ありません。</p>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>
<div class="concept-box5">
<p>・Access の SQL で 3つ以上の表を join する<br />
<a href="https://qiita.com/Takashi_Noboru/items/f188eddb241d18896795">https://qiita.com/Takashi_Noboru/items/f188eddb241d18896795</a><br />
・【Access VBA】【SQL】　3つ以上の表を結合⇒LEFT JOIN<br />
<a href="http://tibirobo.jpn.org/?p=91">http://tibirobo.jpn.org/?p=91</a><br />
・複数テーブルをつなげてレコードを結合する 《ユニオン クエリ》<br />
<a href="https://www.helpforest.com/access/ob_query/ac050007.htm">https://www.helpforest.com/access/ob_query/ac050007.htm</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/11/24/1497/">Access SQL 複数(2,3,4)テーブルの結合(JOIN)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/24/1497/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1497</post-id>	</item>
		<item>
		<title>RecordSetにテーブルのデータを取得する</title>
		<link>https://loosecarrot.com/2018/11/22/1481/</link>
					<comments>https://loosecarrot.com/2018/11/22/1481/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Wed, 21 Nov 2018 15:01:45 +0000</pubDate>
				<category><![CDATA[SE(システムエンジニア)]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1481</guid>

					<description><![CDATA[<p>C#やVB.netを経験してからVBAを扱うと、DataTableってVBAにはないの？と思ってしまいますよね。 DataTableではなく、RecordSetを使うことで同じような感じで処理ができます。 使い方の備忘録</p>
The post <a href="https://loosecarrot.com/2018/11/22/1481/">RecordSetにテーブルのデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>C#やVB.netを経験してからVBAを扱うと、<span style="color: #ff0000;">DataTableってVBAにはないの？</span>と思ってしまいますよね。</p>
<p>DataTableではなく、RecordSetを使うことで同じような感じで処理ができます。</p>
<p>使い方の備忘録として残しておきます。</p>
<h2>テーブルをRecordSetに取得するコード</h2>
<p>&nbsp;</p>
<p>処理としては以下の<span style="color: #ff0000;">抜粋</span>から紹介します。</p>
<div class="simple-box3">
<p>①テーブルからデータをSELECT<br />
②RecordSetへ結果を取得<br />
③csv、tsvに出力</p>
</div>
<p><a href="https://loosecarrot.com/2018/11/20/1459/">https://loosecarrot.com/2018/11/20/1459/</a></p>
<p>作成したAccessファイルは<a href="https://base-shop.loosecarrot.com/items/17677369" target="_blank" rel="noopener noreferrer">こちらからダウンロード</a>できます。</p>
<h3>テーブルをRecordSetに取得する書き方</h3>
<p>以下のような書き方です。</p>
<p><strong>※</strong>RecordSetにSELECT結果を格納しているのは<span style="color: #ff0000;"><strong>13行目</strong></span>です。</p><pre class="urvanov-syntax-highlighter-plain-tag">'=============================================='
'処理　　　 ：csv出力ボタン押下時'
'=============================================='
Private Sub ExportCsv_Click()
　　
　　Dim db As DAO.Database　　　　　　　　　　　　　　　　　　'DBの変数
　　Dim RS_Supplier As DAO.Recordset　　　　　　　　　　　　'レコードセット
　　
　　'DBをセット
　　Set db = CurrentDb
　　
　　'レコードセットへテーブルのデータを取得
　　Set RS_Supplier = db.OpenRecordset(GetSupplier())
　　
　　'レコードセットをファイル出力
　　Call ExportRecordSet(",", RS_Supplier)
　　
End Sub</pre><p></p>
<h3>GetSupplier()の中身</h3>
<p>SELECT文をGetSupplier()で作成しています。</p>
<p>SQLの知識が必要なので、<a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">ゼロからはじめるデータベース操作</a>がおすすめです。</p><pre class="urvanov-syntax-highlighter-plain-tag">'=============================================='
'目的:　　　　Supplierテーブルからすべてを取得'
'引数：'
'戻り値:　　　SQL文'
'=============================================='
Public Function GetSupplier() As String
　　Dim SB As StringBuilder

　　'インスタンス化'
　　Set SB = New StringBuilder

　　SB.Clear

　　SB.AppendLine ("SELECT")
　　SB.AppendLine (" * ")
　　SB.AppendLine ("FROM Supplier")

　　GetSupplier = SB.GetString()
　　
End Function</pre><p>&nbsp;</p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/">https://loosecarrot.com/2018/12/09/1800/</a></p>
<p>StringBuilderについては次で解説しています。</p>
<h2>StringBuilderクラス</h2>
<p>&nbsp;</p>
<p>StringBuilderもC#やVB.netには既存であるクラスなのですが、VBAにはありません。</p>
<p>なので簡単に作ってあります。</p>
<p>一つ作っておくと1つのAccessアプリでは使いまわせるので便利です。</p><pre class="urvanov-syntax-highlighter-plain-tag">'===================================================================='
' StringBuilderクラス'
'--------------------------------------------------------------------'
' create: 2018/02/20'
' update: 2018/02/20'
'===================================================================='
Option Compare Database

'========================================================='
' メンバ宣言'
'========================================================='
' 成形文字列'
Private strString As String

' 改行コード'
Private RTN_CODE As String

'========================================================='
' コンストラクタ'
'========================================================='
Private Sub Class_Initialize()

　　' 初期化'
　　strString = ""
　　RTN_CODE = Chr(13) &amp; Chr(10)

End Sub

'========================================================='
' 成形した文字列を空文字にする'
'========================================================='
Public Sub Clear()

　　strString = ""

End Sub

'========================================================='
' 成形した文字列を取得する'
'---------------------------------------------------------'
' return　　　　　　　　　　成形した文字列'
'========================================================='
Public Function GetString()

　　GetString = strString

End Function

'========================================================='
' 文字列を追加'
'---------------------------------------------------------'
' param strAdd　　　　　　　追加する文字列'
'========================================================='
Public Sub Append(ByVal strAdd)

　　strString = strString &amp; strAdd

End Sub

'========================================================='
' 文字列を追加'
'---------------------------------------------------------'
' param strAdd　　　　　　　追加する文字列'
'========================================================='
Public Sub AppendLine(ByVal strAdd)

　　Append (strAdd &amp; RTN_CODE)

End Sub</pre><p>&nbsp;</p>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>
<div class="concept-box5">
<p>・【Excel VBA】コピペ用：簡易StringBuilder<br />
<a href="https://qiita.com/OneK/items/4f8ecdb33eac7bc840b5">https://qiita.com/OneK/items/4f8ecdb33eac7bc840b5</a></p>
</div>
<div class="innerlink-box1">
<div class="innerlink-box1-title"><i class="jic jin-ifont-post"></i> おすすめ参考書</div>
<p>■Excelマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774170038/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">てっとり早く確実にマスターできる Excel VBAの教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798145009/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4822236277/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">残業しらずのExcel術 関数＆VBAでビジネスを加速</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774180874/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">たった1秒で仕事が片づく Excel自動化の教科書</a></p>
<p>■Accessマクロ</p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4865102930/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">よくわかる Microsoft Access 2016 基礎</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798041335/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessのデータベースのツボとコツがわかる本2013対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798051438/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">AccessVBA逆引き大全 600の極意 2007~2016対応</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4883378888/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">Accessマクロ &amp; VBA 開発工房</a></p>
<p><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4798118818/loosecarrot-22/" target="_blank" rel="nofollow noopener noreferrer">CD付 SQL ゼロからはじめるデータベース操作</a></p>
</div>The post <a href="https://loosecarrot.com/2018/11/22/1481/">RecordSetにテーブルのデータを取得する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/22/1481/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1481</post-id>	</item>
		<item>
		<title>RecordSetからcsv、tsvファイルを出力する</title>
		<link>https://loosecarrot.com/2018/11/20/1459/</link>
					<comments>https://loosecarrot.com/2018/11/20/1459/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Mon, 19 Nov 2018 15:02:07 +0000</pubDate>
				<category><![CDATA[SE(システムエンジニア)]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[Access]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1459</guid>

					<description><![CDATA[<p>Accessのテーブルからtsvファイルを出力しようとしたところ、意外と簡単に出す方法がありませんでした。 備忘録のために残しておこうと思います。 ※カンマ区切りのcsv出力はTransferTextでできるのですが、不</p>
The post <a href="https://loosecarrot.com/2018/11/20/1459/">RecordSetからcsv、tsvファイルを出力する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>Accessのテーブルからtsvファイルを出力しようとしたところ、意外と簡単に出す方法がありませんでした。</p>
<p>備忘録のために残しておこうと思います。</p>
<p>※カンマ区切りのcsv出力はTransferTextでできるのですが、不便なので。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/7qjf29kghq8ksnlsmopy3/OutputTableFromAccess.zip?rlkey=l1292ftjualg3e8isa49lm964&amp;dl=1">無料でダウンロード</a>できます。</p>
<h2>RecordSetからcsv、tsvファイルを出力のコード</h2>
<p>やる処理はざっくり説明すると以下です。</p>
<div class="simple-box3">
<p>①ヘッダーをRecordSetから区切り文字付きで取り出す<br />
②データをRecordSetから区切り文字付きで取り出す<br />
③ファイルにヘッダーとデータを出力</p>
</div>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================================
'目的       ：Accessファイルが配置されている場所にCsv or Tsvファイル出力する
'引数       ：Delimiter      区切り文字：vbTab(タブ)　,(カンマ)
'              ：Rs                出力するレコードセット
'戻り値      :
'==============================================
Private Sub ExportRecordSet(Delimiter As String, Rs As DAO.Recordset)

    Dim strPath As String                           '出力先のパス
    Dim strTblName As String                    'テーブル名
    Dim Header As String                           'テーブルのヘッダー行
    Dim DataRecords As String                   'テーブルのデータ行
    Dim Extension As String                        'ファイル拡張子
    Dim RsCol As Long                                'カラムカウント用
    Dim loopcount As Long
    
    '出力パスを指定
    strPath = CurrentProject.Path &amp; "\"      "
    strTblName = "テーブル"
    
    '拡張子をセット
    If Delimiter = "," Then
        Extension = ".csv"
    ElseIf Delimiter = vbTab Then
        Extension = ".tsv"
    End If
    
    '---------------ヘッダー行を格納する処理---------------
    '列数分ループ
    For RsCol = 0 To Rs.Fields.Count - 1
        Header = Header &amp; Rs.Fields(RsCol).Name &amp; Delimiter
    Next RsCol
    
    '行の最後に着いたカンマorタブを削除
    Header = Left(Header, Len(Header) - 1)

    'Rs.RecordCount取得用処理
    Rs.MoveLast
    Rs.MoveFirst
    
    '---------------データ行を格納する処理---------------
    ' 先頭レコードからEOFまで繰り返す
    Do Until Rs.EOF
        
        loopcount = loopcount + 1
            
        '列数分ループ
        For RsCol = 0 To Rs.Fields.Count - 1
            DataRecords = DataRecords &amp; Rs.Fields(RsCol).Value &amp; Delimiter
        Next RsCol
        
        '行の最後に着いたカンマorタブを削除
        DataRecords = Left(DataRecords, Len(DataRecords) - 1)
        
        '最終行の時は改行しない、それ以外は改行する
        If Rs.RecordCount &lt;&gt; loopcount Then
            'データ行を改行
            DataRecords = DataRecords &amp; Chr(13) &amp; Chr(10)
        End If
        
        '次のレコードへ
        Rs.MoveNext
    Loop
        
    '---------------ファイルに出力---------------
    Open strPath &amp; strTblName &amp; Extension For Output As #1
        Print #1, Header &amp; Chr(13) &amp; Chr(10) &amp; DataRecords
    Close #1
    
    MsgBox "出力完了しました。"
    
End Sub</pre><p>&nbsp;</p>
<p>因みにRecordSetはAccessでもエクセルでも使うことはできます。</p>
<p>ただ、SQLの知識が少し必要なので、参考書やwebサイトで勉強した方が良いと思います。</p>
<p><a href="https://loosecarrot.com/2018/12/09/1800/">https://loosecarrot.com/2018/12/09/1800/</a></p>
<p><span style="color: #ff0000;">2020/06/13 追記</span></p>
<p>ダブルクォーテーションで区切るバージョンと区切らないバージョンの2つに変更しました。</p>
<p>購入者の方から、ダブルクォーテーションで区切って欲しいと声があったためです。</p>
<p>ダウンロード時には2種類のアクセスがダウンロードされます。</p>
<h2>RecordSetからcsv、tsvの出力結果</h2>
<p>実際に作った処理を動かしてみます。</p>
<h3>テーブルの中身</h3>
<p>出力元のテーブルは以下のようになっています。</p>
<table border="1" cellspacing="0" bgcolor="#ffffff">
<thead>
<tr>
<td style="background-color: #89e0d2; border-color: #000000;" bgcolor="#c0c0c0"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">supplier_cd</span></td>
<td style="background-color: #89e0d2; border-color: #000000;" bgcolor="#c0c0c0"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">addr</span></td>
<td style="background-color: #89e0d2; border-color: #000000;" bgcolor="#c0c0c0"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">post_num</span></td>
<td style="background-color: #89e0d2; border-color: #000000;" bgcolor="#c0c0c0"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">tel</span></td>
<td style="background-color: #89e0d2; border-color: #000000;" bgcolor="#c0c0c0"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">fax</span></td>
</tr>
</thead>
<tbody>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301101</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">明治屋</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">埼玉県川越市</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">03-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301102</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">パスコ</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">東京都江戸川区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">4-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301103</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">ライヘルフ</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">大阪府東大阪市</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">5-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301104</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">リプトン紅茶</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">東京都港区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">6-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301105</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">上島珈琲</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">横浜市中区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">7-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301106</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">流通パートナーズ</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">8-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301107</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">全食</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">千葉市美浜区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">9-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301108</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">大地</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">新潟県新潟市</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">10-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301109</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">明治乳業</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">東京都江東区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">11-****-****</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301200</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">キッコーマン</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">千葉県野田市</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301201</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">片岡物産</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">川崎市川崎区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301202</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">ロイヤル食品</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">福岡市那珂区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301203</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">東京製菓</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">東京都大田区</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301204</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">武州フーズ</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">埼玉県入間郡</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
<tr valign="TOP">
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">301205</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">コカコーラボトリング</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
<td style="border-color: #000000;"><span style="font-size: 11pt; color: #000000; font-family: ＭＳ Ｐゴシック;">NULL</span></td>
</tr>
</tbody>
<tfoot></tfoot>
</table>
<h3>出力結果</h3>
<p>キレイに出力することができました。</p>
<a href="https://loosecarrot.com/2018/11/20/1459/csv_export/" rel="attachment wp-att-1477"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1477" src="https://loosecarrot.com/wp-content/uploads/2018/11/csv_export.png" alt="" width="657" height="474" /></a> <a href="https://loosecarrot.com/2018/11/20/1459/tsv_export/" rel="attachment wp-att-1476"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1476" src="https://loosecarrot.com/wp-content/uploads/2018/11/tsv_export.png" alt="" width="946" height="472" srcset="https://loosecarrot.com/wp-content/uploads/2018/11/tsv_export.png 946w, https://loosecarrot.com/wp-content/uploads/2018/11/tsv_export-300x150.png 300w, https://loosecarrot.com/wp-content/uploads/2018/11/tsv_export-768x383.png 768w, https://loosecarrot.com/wp-content/uploads/2018/11/tsv_export.png 856w" sizes="(max-width: 946px) 100vw, 946px" /></a>
<p>※RecordSetにテーブルのデータを取得する箇所は別のところで紹介します。</p>
<p><a href="https://loosecarrot.com/2018/11/22/1481/">https://loosecarrot.com/2018/11/22/1481/</a></p>
<p>https://loosecarrot.com/2019/02/11/3167/</p>
<p>https://loosecarrot.com/2018/12/09/1775/</p>
<p>https://loosecarrot.com/2019/01/28/3054/</p>The post <a href="https://loosecarrot.com/2018/11/20/1459/">RecordSetからcsv、tsvファイルを出力する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/11/20/1459/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1459</post-id>	</item>
	</channel>
</rss>
