<?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>VBA | 文系出身のSEですが、何か</title>
	<atom:link href="https://loosecarrot.com/category/se%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2/vba/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>VBA | 文系出身の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>VBAでフォルダ内のファイルを検索する</title>
		<link>https://loosecarrot.com/2023/09/03/6632/</link>
					<comments>https://loosecarrot.com/2023/09/03/6632/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sun, 03 Sep 2023 09:53:36 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=6632</guid>

					<description><![CDATA[<p>VBAでフォルダ内を検索する方法について紹介します。 実際に作ったファイルはこちらから無料でダウンロードできます。 エクセルの仕様 仕様は、記載したパスから文字列で前方後方一致で検索します。 該当したファイルをE列に記載</p>
The post <a href="https://loosecarrot.com/2023/09/03/6632/">VBAでフォルダ内のファイルを検索する</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-6639" src="https://loosecarrot.com/wp-content/uploads/2023/09/VBAでフォルダ内のファイルを検索する_0.jpg" alt="" width="800" height="400" />
<p>VBAでフォルダ内を検索する方法について紹介します。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/zxqygo3y0giw2ne91lf6o/.zip?rlkey=i1os588akyd4t5yi2k3sbex6i&amp;dl=1">無料でダウンロード</a>できます。</p>
<h2>エクセルの仕様</h2>
<img decoding="async" class="alignnone size-full wp-image-6635" src="https://loosecarrot.com/wp-content/uploads/2023/09/VBAでフォルダ内のファイルを検索する_1.jpg" alt="" width="855" height="219" />
<p>仕様は、記載したパスから文字列で前方後方一致で検索します。</p>
<p>該当したファイルをE列に記載します。</p>
<p>使い方</p>
<ol>
<li>検索するパスと、文字列を記載</li>
<li>検索ボタンをクリック</li>
<li>E列に該当したファイルが書き出しされる</li>
</ol>
<p>&nbsp;</p>
<h3>マクロが無効にされる場合</h3>
<p>ダウンロードすると、以下のような警告が表示されることがあります。</p>
<img decoding="async" class="alignnone size-full wp-image-6636" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_1.jpg" alt="" width="654" height="131" />
<p>ファイルを右クリックして、プロパティから「許可する」にチェックを入れて下さい。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6637" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_2.jpg" alt="" width="421" height="542" />
<h2>コードの解説</h2>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的       ：フォルダからファイルを検索して、セルに書き込む
'==============================
Sub SearchFiles_Click()

    Dim FileName As String                        '検索するファイル名
    Dim SearchText As String                      '検索するファイル名
    Dim SearchPath As String                      '検索するフォルダpath
    Dim Cnt As Long                               'カウント用変数
    Dim Files() As String                         'ファイルパス格納用配列
    
    
    '------------初期化処理------------
    'ファイルパスの書き込みエリアをクリアする
    ThisWorkbook.Sheets("Sheet1").Columns("E").ClearContents
    ThisWorkbook.Sheets("Sheet1").Range("E4") = "該当ファイル一覧"
    
    
    SearchPath = ThisWorkbook.Sheets("Sheet1").Range("検索パス")
    SearchText = ThisWorkbook.Sheets("Sheet1").Range("検索文字")
    
    '------------検索結果をセルに書き込む------------
    'ファイルを検索
    FileName = Dir(SearchPath &amp; "\*" &amp; SearchText &amp; "*")
    
    Do While FileName &lt;&gt; ""
        'E1セルから順番にファイルパスを記述する
        ThisWorkbook.Sheets("Sheet1").Range("E" &amp; Cnt + 5) = FileName
        
        Cnt = Cnt + 1
        
        ' 次のファイル名を参照
        FileName = Dir()
    Loop
    

    MsgBox "検索が完了しました。"
    
    
End Sub</pre><p></p>
<h3>解説</h3>
<p>13行目の「初期化処理」で前回出力した内容をクリアしています。</p>
<p>19、20行目でエクセル内でセットした検索フォルダと、文字列をセットしています。</p>
<p>24行目で該当するファイルの一覧を検索して、FileNameに取得しています。</p>
<p>26～34行目でファイルの一覧を最後までE列に書き込んでいます。</p>The post <a href="https://loosecarrot.com/2023/09/03/6632/">VBAでフォルダ内のファイルを検索する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2023/09/03/6632/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6632</post-id>	</item>
		<item>
		<title>VBAで例外をcatchする書き方</title>
		<link>https://loosecarrot.com/2023/08/03/6633/</link>
					<comments>https://loosecarrot.com/2023/08/03/6633/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 10:09:25 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=6633</guid>

					<description><![CDATA[<p>VBAでもユーザに利用してもらう場合などは、例外が発生しても落ちないように考慮が必要です。 そこで、簡易的に例外を捕まえてメッセージを表示するVBAを使っているので紹介します。 実際に作ったファイルはこちらから無料でダウ</p>
The post <a href="https://loosecarrot.com/2023/08/03/6633/">VBAで例外をcatchする書き方</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6645" src="https://loosecarrot.com/wp-content/uploads/2023/09/VBAで例外をcatchする書き方_0.jpg" alt="" width="800" height="400" />
<p>VBAでもユーザに利用してもらう場合などは、例外が発生しても落ちないように考慮が必要です。</p>
<p>そこで、簡易的に例外を捕まえてメッセージを表示するVBAを使っているので紹介します。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/c0olwqdz0krg391nmei1r/VBA.zip?rlkey=wpi0ual87bketgr4ah7f34jhq&amp;dl=1">無料でダウンロード</a>できます。</p>
<h2>エクセルの仕様</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6642" src="https://loosecarrot.com/wp-content/uploads/2023/09/VBAで例外をcatchする書き方_1.jpg" alt="" width="800" height="400" />
<p>仕様は、「あ、い、う、え、お」と<span style="color: #ff0000;">本当は</span>出力したいです。</p>
<p>ただ、一部存在しないシート名を指定していることで、<span style="color: #ff0000;">例外</span>が起こるようになっています。</p>
<h3>マクロが無効にされる場合</h3>
<p>ダウンロードすると、以下のような警告が表示されることがあります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6636" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_1.jpg" alt="" width="654" height="131" />
<p>ファイルを右クリックして、プロパティから「許可する」にチェックを入れて下さい。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6637" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_2.jpg" alt="" width="421" height="542" />
<h2>コードの解説</h2>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的       ：
'==============================
Sub test_Click()

    '------エラー時はErrCatchラベルへ------
    On Error GoTo ErrCatch
    
    'ファイルパスの書き込みエリアをクリアする
    ThisWorkbook.Sheets("Sheet1").Columns("D").ClearContents
    
    'D1～5のセルに数字を記載する
    ThisWorkbook.Sheets("Sheet1").Range("D1") = "あ"
    ThisWorkbook.Sheets("Sheet1").Range("D2") = "い"
    ThisWorkbook.Sheets("Sheet1").Range("D3") = "う"
    ThisWorkbook.Sheets("Sheet20").Range("D4") = "え"    '存在しないシートを指定
    ThisWorkbook.Sheets("Sheet1").Range("D5") = "お"
    
    MsgBox "完了しました。"
    
'エラーキャッチ
ErrCatch:

    ' エラーの場合、エラーメッセージを表示する
    Call ShowErrMsg
    
End Sub

'==============================
'目的       ：エラーの場合、エラーメッセージを表示する
'==============================
Public Sub ShowErrMsg()

    'エラーがあればメッセージ表示
    If Err.Number &lt;&gt; 0 Then
        MsgBox "想定外のエラーが発生しました。" &amp; vbCrLf + _
                "エラー番号：" + CStr(Err.Number) &amp; vbCrLf + _
                "エラーの種類：" + Err.Description
    End If

End Sub</pre><p></p>
<h3>解説</h3>
<p>7行目で、例外があった場合、「<span class="crayon-v">ErrCatch</span>」というラベルに移動するようになっています。</p>
<p>13行目～17行目で「あいうえお」と書き込むように書いています。</p>
<p>ただ、16行目は存在しないシート名「sheet20」が指定されているため例外が発生します。</p>
<p>32行目でエラー時のメソッドが記載してあります。</p>
<p>例外があった場合、<span class="crayon-v">Err</span><span class="crayon-sy">.</span><span class="crayon-v">Numberが0以外となります。</span></p>
<p>0以外(エラーがあった)場合、エラー内容をメッセージ表示させています。</p>The post <a href="https://loosecarrot.com/2023/08/03/6633/">VBAで例外をcatchする書き方</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2023/08/03/6633/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6633</post-id>	</item>
		<item>
		<title>Excel VBAの配列からtsv・csvを出力する</title>
		<link>https://loosecarrot.com/2020/02/15/3951/</link>
					<comments>https://loosecarrot.com/2020/02/15/3951/#comments</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sat, 15 Feb 2020 04:45:06 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[プログラミング独学]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=3951</guid>

					<description><![CDATA[<p>仕事でtsvやcsvをエクセルから出したいことがありました。 備忘録として残しておきます。 インターフェースファイルを作るときなどにも役立つのでぜひ知っておいてください。 実際に作ったファイルはこちらから無料でダウンロー</p>
The post <a href="https://loosecarrot.com/2020/02/15/3951/">Excel VBAの配列からtsv・csvを出力する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3961" src="https://loosecarrot.com/wp-content/uploads/2020/02/7e07b1d28193de5d08fd8647004f1bd2-1.png" alt="" width="800" height="400" />
<p>仕事でtsvやcsvをエクセルから出したいことがありました。</p>
<p>備忘録として残しておきます。</p>
<p>インターフェースファイルを作るときなどにも役立つのでぜひ知っておいてください。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/kxxm00exn6qechfrk46sy/csv-tsvOutput.zip?rlkey=srjxk94yvmmzcltz4oqrt61h5&amp;dl=1">無料でダウンロード</a>できます。</p>
<h2>エクセルの仕様</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6670" src="https://loosecarrot.com/wp-content/uploads/2020/02/Excel-VBAの配列からtsv・csvを出力する_9-1.jpg" alt="" width="800" height="400" />
<p>区切り文字とダブルクォーテーション囲みの有無を設定できます。</p>
<p>出力ボタンをクリックすると、隣の「出力元シート」の内容を出力します。</p>
<p>出力場所はエクセルの配置されている場所です。</p>
<h3>マクロが無効にされる場合</h3>
<p>ダウンロードすると、以下のような警告が表示されることがあります。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6636" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_1.jpg" alt="" width="654" height="131" />
<p>ファイルを右クリックして、プロパティから「許可する」にチェックを入れて下さい。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6637" src="https://loosecarrot.com/wp-content/uploads/2023/09/使い方_2.jpg" alt="" width="421" height="542" />
<h2>エクセルからファイル出力するコード</h2>
<p>コードはこんな感じです。</p>
<p>流れとしては以下です。</p>
<div class="simple-box3">
<p>①出力対象範囲をを決める(<span style="color: #ff0000;">可変対応しており、列、行が増えてもOK</span>)</p>
<p>②出力範囲を配列に取得する</p>
<p>③配列から区切り文字で変数へ格納</p>
<p>④ファイルへ書き込む</p>
<p>ファイル名は[Output_] + [yyyyMMdd_] + [mmss]</p>
</div>
<p>&nbsp;</p><pre class="urvanov-syntax-highlighter-plain-tag">'=============================================
'目的       ：ファイルを出力
'履歴        :#2020/02/14
'=============================================
Sub writeTsv()
     
    Dim startRow As Long                              '読込みする開始行
    Dim endRow As Long                                '読込みする終了行
    Dim startCol As Long                              '読込みする開始列
    Dim endCol As Long                                '読込みする終了行
    Dim menuWs As Worksheet                           'メニューシート
    Dim ws As Worksheet                               'シート
    Dim outputArray As Variant                        '出力するデータの配列
    Dim filePath As String                            '出力するパス
    Dim i As Integer                                   'ループ用変数
    Dim j As Long                                      'ループ用変数
    Dim outputText As String                           '出力テキストを格納
    Dim Delimiter As String                            '区切り文字
    Dim Extension As String                            'ファイルの拡張子
    Dim enclosingLetter  As String                      '囲みの文字
    
    
    '-----------メニューシートを設定値をセット-----------
    Set menuWs = ThisWorkbook.Worksheets("メニュー")
    menuWs.Activate
    '区切り文字ををセット
    If menuWs.Range("E5") = "カンマ" Then
        Delimiter = ","
        Extension = ".csv"
    ElseIf menuWs.Range("E5") = "タブ" Then
        Delimiter = vbTab
        Extension = ".tsv"
    Else
        MsgBox "区切文字を選択してください"
        Exit Sub
    End If
    
    '囲み文字をセット
    If menuWs.Range("E6") = "あり" Then
        enclosingLetter = Chr(34)
    Else
        enclosingLetter = ""
    End If
    
    
    '-----------出力元シートからファイル出力-----------
    '処理対象のシートをセット
    Set ws = ThisWorkbook.Worksheets("出力元シート")
    ws.Activate
    
    '出力対象範囲を取得する
    startCol = 1                                        '開始列
    startRow = 2                                        '開始行
    endCol = Range("A1").End(xlToRight).Column          '最終列
    endRow = Range("A3").End(xlDown).Row - 1            '最終行
    
    
    '処理対象の範囲を配列に取得
    Set outputArray = ActiveSheet.Range(Cells(startRow, startCol), Cells(endRow, endCol))
    
    
    
    '-----------ファイルに書き込む文字列を作成-----------
    '列×行数分ループ
    For i = 1 To endRow
        For j = 1 To endCol
        
            '最終列かつ最終行に来たら改行
            If i = endRow And j = endCol Then
                outputText = outputText &amp; enclosingLetter &amp; outputArray(i, j) &amp; enclosingLetter
                GoTo NextLoop
            End If
            
            '最終列に来たら改行
            If j = endCol Then
                outputText = outputText &amp; enclosingLetter &amp; outputArray(i, j) &amp; enclosingLetter &amp; vbCrLf
                GoTo NextLoop
            End If
            
            '区切り文字で1セルずつ変数へ格納
            outputText = outputText &amp; enclosingLetter &amp; outputArray(i, j) &amp; enclosingLetter &amp; Delimiter
            
NextLoop:
            
        Next j
    Next i
        
    
    'ファイルを書き込み
    '出力先とファイル名をセット
    filePath = ActiveWorkbook.Path &amp; "\Output_" &amp; Format(Now, "yyyymmdd_HHMMSS") &amp; Extension
    
    Open filePath For Output As #1
    Print #1, outputText
    Close #1
    
    
    '処理対象のシートをセット
    menuWs.Activate
    
    MsgBox "出力完了"
    
End Sub</pre><p></p>
<h2>実行結果</h2>
<p>「出力元シート」に記載されている内容が出力されます。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6671" src="https://loosecarrot.com/wp-content/uploads/2020/02/Excel-VBAの配列からtsv・csvを出力する_10.jpg" alt="" width="800" height="400" />
<p>エクセルの配置されている場所にファイルが出力されます。</p>
<p>※以下はtsv出力の結果のファイルです。</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6672" src="https://loosecarrot.com/wp-content/uploads/2020/02/Excel-VBAの配列からtsv・csvを出力する_11.jpg" alt="" width="800" height="400" />
<h2>解説</h2>
<p>42行目～62行目でメニューシートの設定内容を変数に格納しています。</p>
<p>66行目～92行目で出力元シートの内容を配列に格納しています。</p>
<p>91、92行目で一番最後の列、行を取得しているため、<span style="color: #ff0000;">列、行が増えても自動で出力範囲が変わります。</span></p>
<p>63行目～86行目でセルごとの値を区切り文字を付けて文字連結しています。</p>
<p>enclosingLetterは、ダブルクォーテーション囲み有無の設定の際に、</p>
<p>「あり」の場合、[&#8220;]をセット</p>
<p>「なし」の場合、空白をセットすることで囲み文字が制御されています。</p>The post <a href="https://loosecarrot.com/2020/02/15/3951/">Excel VBAの配列からtsv・csvを出力する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/02/15/3951/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3951</post-id>	</item>
		<item>
		<title>VBAでバーコード生成する</title>
		<link>https://loosecarrot.com/2020/01/10/4337/</link>
					<comments>https://loosecarrot.com/2020/01/10/4337/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Fri, 10 Jan 2020 13:29:08 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=4337</guid>

					<description><![CDATA[<p>商品をこれから出品したりすることもあるので、バーコード発行するエクセルVBAを作ってみました。 実際に作ったファイルはこちらから無料でダウンロードできます。 JANCODE-nicBARで出力したサンプルを載せておきます</p>
The post <a href="https://loosecarrot.com/2020/01/10/4337/">VBAでバーコード生成する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4399" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_0.jpg" alt="" width="800" height="400" />
<p>商品をこれから出品したりすることもあるので、バーコード発行するエクセルVBAを作ってみました。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/lsur1exp304vh5uw00l99/.zip?rlkey=doffc0ot551qfz1iry5a990jk&amp;dl=1">無料でダウンロード</a>できます。</p>
<p>JANCODE-nicBARで<a href="https://www.dropbox.com/scl/fi/g4lnq0p33yywaayuidfam/.pdf?rlkey=gghp0rx8q2f128t9bc2f9mhqm&amp;dl=1" target="_blank" rel="noopener noreferrer">出力したサンプル</a>を載せておきます。</p>
<p>因みにフォントはそれぞれ以下からダウンロードさせていただきました。</p>
<div class="simple-box2">
<p><a href="http://nicotan.at-ninja.jp/blog/jancode_font_download.html" target="_blank" rel="noopener noreferrer">JANCODE-nicBAR</a></p>
<p><a href="http://nicotan.at-ninja.jp/blog/jancode_font_download.html" target="_blank" rel="noopener noreferrer">JANCODE-nicWabun</a></p>
<p><a href="https://mam-mam.net/download/nw-7.html" target="_blank" rel="noopener noreferrer">NW-7</a></p>
<p><a href="https://mam-mam.net/download/code39.html" target="_blank" rel="noopener noreferrer">Code39</a></p>
</div>
<h2>バーコード発行エクセルの説明</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4404" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_4.jpg" alt="" width="800" height="400" />
<p>サンプルを見て分かる通りですが、<span style="color: #ff0000;">1ページに24枚</span>のバーコードを作ります。</p>
<p>1行に3枚×8段が1シートになります。</p>
<div class="kaerebalink-image" style="float: left; margin: 0 15px 10px 0;"><img loading="lazy" decoding="async" class="alignnone wp-image-4403" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_3.jpg" alt="" width="290" height="145" /><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" /></div>
<div class="kaerebalink-info" style="line-height: 120%; zoom: 1; overflow: hidden;">
<div class="kaerebalink-name" style="margin-bottom: 10px; line-height: 120%;">
<a href="https://www.amazon.co.jp/gp/product/B088M19X1C/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B088M19X1C&amp;linkCode=as2&amp;tag=loosecarrot-22&amp;linkId=fba68d1f0ae11a61a2845c67cd088202" target="_blank" rel="noopener noreferrer">バーコードシール 24面</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" />
<div class="kaerebalink-powered-date" style="font-size: 8pt; margin-top: 5px; font-family: verdana; line-height: 120%;">posted with <a href="https://kaereba.com" target="_blank" rel="nofollow noopener noreferrer">カエレバ</a></div>
</div>
<div class="kaerebalink-link1" style="margin-top: 10px;">
<div class="shoplinkyahoo" style="display: inline; margin-right: 5px;"><a href="//af.moshimo.com/af/c/click?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fsettaroponpon%2F20190711142128-00811.html%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title" target="_blank" rel="noopener noreferrer">Yahooショッピング</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" /></div>
<div class="shoplinkamazon" style="display: inline; margin-right: 5px;"><a href="https://www.amazon.co.jp/gp/product/B088M19X1C/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B088M19X1C&amp;linkCode=as2&amp;tag=loosecarrot-22&amp;linkId=fba68d1f0ae11a61a2845c67cd088202" target="_blank" rel="noopener noreferrer">Amazon</a></div>
<div class="shoplinkrakuten" style="display: inline; margin-right: 5px;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2BY7HX+8Y3JTM+2HOM+BW8O1&amp;rakuten=y&amp;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2F0ea62065.34400275.0ea62066.204f04c0%2Fa14100475174_2BY7HX_8Y3JTM_2HOM_BW8O1%3Fpc%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fmannishboy%252F20014844096%252F%26m%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fmannishboy%252F20014844096%252F" target="_blank" rel="noopener noreferrer">楽天市場</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" /></div>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>シートは3枚あります。</p>
<div class="simple-box2">
<p>「リスト」シート<br />
「バーコード」シート<br />
「フォーマット」シート</p>
</div>
<h3>リストシート</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4408" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6.jpg" alt="" width="1095" height="373" srcset="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6.jpg 1095w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6-300x102.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6-1024x349.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6-768x262.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_6.jpg 856w" sizes="(max-width: 1095px) 100vw, 1095px" />
<p>商品(型番)、数量、商品名をを入力して、バーコード生成ボタンを押すと、バーコードを発行できます。</p>
<p>EF列で発行するバーコードやフォントサイズなどを指定することでそれに応じたバーコードが出せます。</p>
<h3>バーコードシート</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4409" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_7.jpg" alt="" width="776" height="364" />
<p>リストシートで入力した内容が発行されます。</p>
<p>1ページに24枚(3×8行)できます。</p>
<h3>フォーマットシート</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4410" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_8.jpg" alt="" width="809" height="378" />
<p>フォーマットシートに設定した幅や高さをコピーして、バーコードシートが作成されます。</p>
<p>そのため、フォーマットシートで変更した高さや幅を変更することで印刷するバーコードも変更されます。</p>
<h2>バーコード発行エクセルの使い方</h2>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4402" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_1.jpg" alt="" width="800" height="400" />
<p>基本的に幅や高さは自分で変更できるように作っています。</p>
<p>また、フォントや発行するバーコードの種類も決めることができます。</p>
<p>詳細をこの下で説明していきます。</p>
<h3>フォントのインストール</h3>
<p>フォントは事前にインストールした状態でバーコード発行をして下さい。</p>
<div class="concept-box2">
<p>フォントがないとマクロを実行してもバーコードは表示されません。</p>
</div>
<p>私がテスト的に試したのは以下の3つのフォントです。</p>
<p>すべて、ウェブサイトからダウンロードできますが、一応リンクも載せておきます。</p>
<div class="simple-box3">
<p><a href="https://www.dropbox.com/s/y399480lkynjo9y/CODE39.ttf?dl=1" target="_blank" rel="noopener noreferrer">CODE39</a><br />
<a href="https://www.dropbox.com/s/s3w0nia1ulmr1r6/NW-7.ttf?dl=1" target="_blank" rel="noopener noreferrer">NW-7</a><br />
<a href="https://www.dropbox.com/s/xoed3fmbov2l0q9/JANCODE-nicBAR.ttf?dl=1" target="_blank" rel="noopener noreferrer">JANCODE-nicBAR</a><br />
<a href="https://www.dropbox.com/s/mbzrxoh55b7t60n/JANCODE-nicWabun.ttf?dl=1" target="_blank" rel="noopener noreferrer">JANCODE-nicWabun</a></p>
</div>
<h3>フォーマットシートで幅・高さ変更</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4407" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_5.jpg" alt="" width="800" height="400" />
<p>バーコードの種類や、印刷するシールによってはずれが出てくることもあり得ます。</p>
<p>なので、フォーマットシートの高さや幅を変更することで反映することができるようにしています。</p>
<p>文字が入るのはB、D、F列なのでここをメインに幅や高さ調整すればOKです。</p>
<h3>バーコード種類・スタートストップコード・フォントサイズ変更</h3>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4411" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_9.jpg" alt="" width="896" height="409" srcset="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_9.jpg 896w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_9-300x137.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_9-768x351.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_9.jpg 856w" sizes="(max-width: 896px) 100vw, 896px" />
<p>上の画像の<span style="color: #ff0000;">赤枠</span>で囲んでいるところで以下を設定できます。</p>
<div class="simple-box2">
<p>バーコード種類<br />
スタート、ストップコード<br />
フォントサイズ</p>
</div>
<p><span style="background-color: #33cccc;">水色</span>のところはバーコードの情報を設定します。</p>
<p>例えば、CODE39のバーコードを使う場合、フォントを変更します。</p>
<p>また、CODE39はスタート、ストップコードが必要なので*を入れておきます。</p>
<p><span style="background-color: #cc99ff;">紫色</span>のところは商品コードが表示されるセルの設定です。</p>
<p>好きなサイズに変更してみて下さい。</p>
<p><span style="background-color: #99cc00;">緑色</span>のところは商品がが表示されるセルの設定です。</p>
<p>商品名が長かったりする場合は、フォントサイズを小さくできます。</p>
<p>&nbsp;</p>
<p>フォントサイズや、揃え位置を変更してみたサンプルです。</p>
<p>JANCODE-nicWabunで商品コードは左寄せ、商品名は右寄せです。</p>
<p><a href="https://loosecarrot.com/wp-content/uploads/2020/09/揃え位置、JANCODE-nicWabun発行サンプル.pdf">揃え位置、JANCODE-nicWabun発行サンプル</a></p>
<a href="https://loosecarrot.com/wp-content/uploads/2020/09/揃え位置、JANCODE-nicWabun発行サンプル.pdf"><img loading="lazy" decoding="async" class="alignnone wp-image-4417 size-full" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1.jpg" alt="" width="1160" height="671" srcset="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1.jpg 1160w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1-300x174.jpg 300w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1-1024x592.jpg 1024w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1-768x444.jpg 768w, https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_10-1.jpg 856w" sizes="(max-width: 1160px) 100vw, 1160px" /></a>
<h4>フォント設定について</h4>
<p>インストールした後に、フォントを選ぶことができます。</p>
<p>F2セルにセットするフォントはこの表示されているフォント名を記入してください。</p>
<p>CODE39であれば、フォント名と同じ「CODE39」と入力してください</p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-4414" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_11.jpg" alt="" width="800" height="442" />
<h2>バーコード発行のVBA</h2>
<p>一部だけの抜粋ですが、以下がコードです。</p>
<p>商品コードをセルに出力して、フォントを設定しています。</p><pre class="urvanov-syntax-highlighter-plain-tag">'リストシートの情報を元にバーコードシートに転記
For i = 1 To CreateBarCodeCount
    
    ItemCode = Sheets("リスト").Range("A" &amp; i + 1)
    Amount = Int(Sheets("リスト").Range("B" &amp; i + 1))
    ItemName = Sheets("リスト").Range("C" &amp; i + 1)
    
    
    '数量分ループ
    For j = 1 To Amount
    
        '24枚(1ページ分作った場合)
        If (BarCodeCreatedCount Mod 24 = 0) And BarCodeCreatedCount &lt;&gt; 0 Then
            kijunRow = kijunRow + 5
            LoopCount = 1
            
        '3列書込んだら次の行へいく
        ElseIf LoopCount = 4 Then
            LoopCount = 1
            kijunRow = kijunRow + 4
        End If
        
        'B列
        If LoopCount = 1 Then
            'バーコード
            Sheets("バーコード").Range("B" &amp; kijunRow) = Range("スタートコード") &amp; ItemCode &amp; Range("ストップコード")
            Sheets("バーコード").Range("B" &amp; kijunRow).Font.Name = Range("バーコードフォント")
            Sheets("バーコード").Range("B" &amp; kijunRow).Font.Size = Range("バーコードフォントサイズ")
            Sheets("バーコード").Range("B" &amp; kijunRow).HorizontalAlignment = ConvertHorizontalAlignment(Range("バーコード揃え"))
            '商品コード
            Sheets("バーコード").Range("B" &amp; kijunRow + 1) = ItemCode
            Sheets("バーコード").Range("B" &amp; kijunRow + 1).Font.Size = Range("商品コードフォントサイズ")
            Sheets("バーコード").Range("B" &amp; kijunRow + 1).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品コード揃え"))
            '商品名
            Sheets("バーコード").Range("B" &amp; kijunRow + 2) = ItemName
            Sheets("バーコード").Range("B" &amp; kijunRow + 2).Font.Size = Range("商品名フォントサイズ")
            Sheets("バーコード").Range("B" &amp; kijunRow + 2).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品名揃え"))
            
            BarCodeCreatedCount = BarCodeCreatedCount + 1
        'D列
        ElseIf LoopCount = 2 Then
            'バーコード
            Sheets("バーコード").Range("D" &amp; kijunRow) = Range("スタートコード") &amp; ItemCode &amp; Range("ストップコード")
            Sheets("バーコード").Range("D" &amp; kijunRow).Font.Name = Range("バーコードフォント")
            Sheets("バーコード").Range("D" &amp; kijunRow).Font.Size = Range("バーコードフォントサイズ")
            Sheets("バーコード").Range("D" &amp; kijunRow).HorizontalAlignment = ConvertHorizontalAlignment(Range("バーコード揃え"))
            '商品コード
            Sheets("バーコード").Range("D" &amp; kijunRow + 1) = ItemCode
            Sheets("バーコード").Range("D" &amp; kijunRow + 1).Font.Size = Range("商品コードフォントサイズ")
            Sheets("バーコード").Range("D" &amp; kijunRow + 1).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品コード揃え"))
            '商品名
            Sheets("バーコード").Range("D" &amp; kijunRow + 2) = ItemName
            Sheets("バーコード").Range("D" &amp; kijunRow + 2).Font.Size = Range("商品名フォントサイズ")
            Sheets("バーコード").Range("D" &amp; kijunRow + 2).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品名揃え"))
            
            BarCodeCreatedCount = BarCodeCreatedCount + 1
        'F列
        Else
            'バーコード
            Sheets("バーコード").Range("F" &amp; kijunRow) = Range("スタートコード") &amp; ItemCode &amp; Range("ストップコード")
            Sheets("バーコード").Range("F" &amp; kijunRow).Font.Name = Range("バーコードフォント")
            Sheets("バーコード").Range("F" &amp; kijunRow).Font.Size = Range("バーコードフォントサイズ")
            Sheets("バーコード").Range("F" &amp; kijunRow).HorizontalAlignment = ConvertHorizontalAlignment(Range("バーコード揃え"))
            '商品コード
            Sheets("バーコード").Range("F" &amp; kijunRow + 1) = ItemCode
            Sheets("バーコード").Range("F" &amp; kijunRow + 1).Font.Size = Range("商品コードフォントサイズ")
            Sheets("バーコード").Range("F" &amp; kijunRow + 1).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品コード揃え"))
            '商品名
            Sheets("バーコード").Range("F" &amp; kijunRow + 2) = ItemName
            Sheets("バーコード").Range("F" &amp; kijunRow + 2).Font.Size = Range("商品名フォントサイズ")
            Sheets("バーコード").Range("F" &amp; kijunRow + 2).HorizontalAlignment = ConvertHorizontalAlignment(Range("商品名揃え"))
            
            BarCodeCreatedCount = BarCodeCreatedCount + 1
        End If
        
        LoopCount = LoopCount + 1
    Next j
    
Next i</pre><p>&nbsp;</p>
<p>24面なので、amazonや楽天でシールを一緒に買って使うのもありだと思います。</p>
<div class="kaerebalink-image" style="float: left; margin: 0 15px 10px 0;"><img loading="lazy" decoding="async" class="alignnone wp-image-4403" src="https://loosecarrot.com/wp-content/uploads/2020/09/バーコードラベル生成ツール_3.jpg" alt="" width="290" height="145" /><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" /></div>
<div class="kaerebalink-info" style="line-height: 120%; zoom: 1; overflow: hidden;">
<div class="kaerebalink-name" style="margin-bottom: 10px; line-height: 120%;">
<a href="https://www.amazon.co.jp/gp/product/B088M19X1C/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B088M19X1C&amp;linkCode=as2&amp;tag=loosecarrot-22&amp;linkId=fba68d1f0ae11a61a2845c67cd088202" target="_blank" rel="noopener noreferrer">バーコードシール 24面</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" />
<div class="kaerebalink-powered-date" style="font-size: 8pt; margin-top: 5px; font-family: verdana; line-height: 120%;">posted with <a href="https://kaereba.com" target="_blank" rel="nofollow noopener noreferrer">カエレバ</a></div>
</div>
<div class="kaerebalink-link1" style="margin-top: 10px;">
<div class="shoplinkyahoo" style="display: inline; margin-right: 5px;"><a href="//af.moshimo.com/af/c/click?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502&amp;url=https%3A%2F%2Fstore.shopping.yahoo.co.jp%2Fsettaroponpon%2F20190711142128-00811.html%3Fsc_i%3Dshp_pc_search_itemlist_shsrg_title" target="_blank" rel="noopener noreferrer">Yahooショッピング</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=1225&amp;pc_id=1925&amp;pl_id=18502" width="1" height="1" /></div>
<div class="shoplinkamazon" style="display: inline; margin-right: 5px;"><a href="https://www.amazon.co.jp/gp/product/B088M19X1C/ref=as_li_tl?ie=UTF8&amp;camp=247&amp;creative=1211&amp;creativeASIN=B088M19X1C&amp;linkCode=as2&amp;tag=loosecarrot-22&amp;linkId=fba68d1f0ae11a61a2845c67cd088202" target="_blank" rel="noopener noreferrer">Amazon</a></div>
<div class="shoplinkrakuten" style="display: inline; margin-right: 5px;"><a href="https://rpx.a8.net/svt/ejp?a8mat=2BY7HX+8Y3JTM+2HOM+BW8O1&amp;rakuten=y&amp;a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2F0ea62065.34400275.0ea62066.204f04c0%2Fa14100475174_2BY7HX_8Y3JTM_2HOM_BW8O1%3Fpc%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fmannishboy%252F20014844096%252F%26m%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fmannishboy%252F20014844096%252F" target="_blank" rel="noopener noreferrer">楽天市場</a><img loading="lazy" decoding="async" style="border: none;" src="//i.moshimo.com/af/i/impression?a_id=2087701&amp;p_id=54&amp;pc_id=54&amp;pl_id=616" width="1" height="1" /></div>
</div>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="concept-box5">
<p><a href="http://nicotan.at-ninja.jp/blog/jancode_font_download.html" target="_blank" rel="noopener noreferrer">JANCODEバーコードのフォントのダウンロード</a></p>
<p><a href="https://mam-mam.net/download/code39.html" target="_blank" rel="noopener noreferrer">https://mam-mam.net/download/code39.html</a></p>
</div>
<p>&nbsp;</p>The post <a href="https://loosecarrot.com/2020/01/10/4337/">VBAでバーコード生成する</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2020/01/10/4337/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4337</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 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>
<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>
<a href="https://loosecarrot.com/2018/12/09/1800/#01-2" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/302908301226fed6a1fb99c29d1a0594-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">VBA C# オススメ参考書</span><span class="blog-card-excerpt">プログラミングの参考書でオススメの紹介をしていきます。

それぞれ私が使っている言語のみです。

VBAのオススメ参考書をExc...</span></div></div></a>
<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 loading="lazy" 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>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<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>Excel VBA メール送信ツール(フリーメール)</title>
		<link>https://loosecarrot.com/2018/12/02/1576/</link>
					<comments>https://loosecarrot.com/2018/12/02/1576/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Sat, 01 Dec 2018 15:01:53 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1576</guid>

					<description><![CDATA[<p>VBAでメール送信について紹介します。 自動でメール送信するツールを作ってみました。 今回はOutlookではなくフリーメール(YahooJapan)です。 実際に作ったファイルはこちらから無料でダウンロードできます。</p>
The post <a href="https://loosecarrot.com/2018/12/02/1576/">Excel VBA メール送信ツール(フリーメール)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>VBAでメール送信について紹介します。</p>
<p>自動でメール送信するツールを作ってみました。</p>
<p>今回はOutlookではなくフリーメール(YahooJapan)です。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/a1q8d2v3btc78an1h2vjt/VBA.zip?rlkey=oo32q9xy0napvnnait51rg2bq&amp;dl=1">無料でダウンロード</a>できます。</p>
<p>使い方の説明は<a href="https://www.dropbox.com/scl/fi/jrdileuupdi4begzh2ilh/_.pdf?rlkey=qd4njeoytoro1ypxixspatnlp&amp;dl=1" target="_blank" rel="nofollow noopener noreferrer">こちらからダウンロード</a>可能です。</p>
<h2 id="00">エクセルの名前の定義</h2>
<p>エクセル自体にもセル名の定義をしているので、まずそこから説明しておきます。</p>
<p>意外とエクセルのVBAでは名前の定義を色々使えると良いことが多いです。</p>
<p>仕様と合わせて説明します。</p>
<h3>仕様</h3>
<p>①「送信元アカウント」を選択します。</p>
<p>リストは「アカウント」をもとに選べます。</p>
<p>下の画像で言うと、Gmail、Yahoo、YahooUSAがあるので3つから選べる状態です。</p>
<p>②送信ボタンをクリックすると「送信元アドレス」からとなりのシートを１つずつ読込んでメールを送信していきます。</p>
<a href="https://loosecarrot.com/2018/12/05/1576/%e3%83%a1%e3%82%a4%e3%83%b3%e3%82%b7%e3%83%bc%e3%83%88%e8%aa%ac%e6%98%8e/" rel="attachment wp-att-1609"><img loading="lazy" decoding="async" class="alignnone size-large wp-image-1609" src="https://loosecarrot.com/wp-content/uploads/2018/12/2b76d06dad917eb334d450394889253d-1024x472.png" alt="" width="1024" height="472" srcset="https://loosecarrot.com/wp-content/uploads/2018/12/2b76d06dad917eb334d450394889253d-1024x472.png 1024w, https://loosecarrot.com/wp-content/uploads/2018/12/2b76d06dad917eb334d450394889253d-300x138.png 300w, https://loosecarrot.com/wp-content/uploads/2018/12/2b76d06dad917eb334d450394889253d-768x354.png 768w, https://loosecarrot.com/wp-content/uploads/2018/12/2b76d06dad917eb334d450394889253d-1024x472.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></a>
<h3>名前の定義</h3>
<p>メインシートの各名前は以下のようなルールで定義づけしています。</p>
<div class="simple-box3">
<p>SMTPServer　　　：[送信元アカウント] + [_smtpserver]<br />
PortNumber　　　：[送信元アカウント] + [_smtpserverport]<br />
送信アカウント名　：[送信元アカウント] + [_sendusername]<br />
パスワード　　　　：[送信元アカウント] + [_sendpassword]<br />
送信元アドレス　　：[送信元アカウント] + [_From]</p>
</div>
<p>「メール送信」ボタンクリック後、後続の処理で「送信元アカウント」と文字連結をして送信を行います。</p>
<a href="https://loosecarrot.com/2019/04/05/3353/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/04/GoogleSpreadSheet_Email-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">GoogleSpreadSheetから自動でメール送信</span><span class="blog-card-excerpt">

GoogleSpreadSheetを使って指定時刻にメールを送信するプログラムを作ってみました。

GoogleSpread...</span></div></div></a>
<h2 id="01">メール用の参照設定(CDO)</h2>
<h3>参照設定</h3>
<p>ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。</p>
<p>手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。</p>
<p>その後、Microsoft CDO for Windows 2000 Libraryにチェックを付けておいてください。</p>
<a href="https://loosecarrot.com/2018/12/05/1576/%e5%8f%82%e7%85%a7%e8%a8%ad%e5%ae%9acdo/" rel="attachment wp-att-1592"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1592" src="https://loosecarrot.com/wp-content/uploads/2018/12/f405bcf82cc3099efa21e862514c74e2.png" alt="" width="455" height="317" /></a>
<p>CDOとはMicrosoft Collaboration Data Objectsのことだそうです。</p>
<blockquote><p>CDO は、メッセージング機能を持つアプリケーションの作成を容易にするために、あるいは、既存のアプリケーションにメッセージング機能を追加するために設計されたものです。<br />
<a href="https://msdn.microsoft.com/ja-jp/library/cc446847.aspx">microsoft.com</a>より</p></blockquote>
<h3>Gmailの送信許可は不可になった</h3>
<p><s>Gmailアカウントを使ってメール送信する場合は「安全性の低いアプリのアクセス」許可しておく必要があります。</s></p>
<p><s>設定は以下にアクセスすることで変更できます。</s></p>
<p><a href="https://myaccount.google.com/lesssecureapps">https://myaccount.google.com/lesssecureapps</a></p>
<p><span style="color: #ff0000;">2022年5月からGmailはユーザとパスワードでログインすることはできなくなりました。</span></p>
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-6618" src="https://loosecarrot.com/wp-content/uploads/2018/12/Excel-VBA-メール送信ツールフリーメール_20230903.jpg" alt="" width="398" height="150" />
<p><strong>YahooJapanアカウントを使ってメール送信する場合は特に設定は必要はないようです。</strong></p>
<h2 id="02">メール送信処理のコード</h2>
<p>処理の流れは以下の順です。</p>
<div class="simple-box3">
<p>①メインシートから送信元情報を取得<br />
②となりのシートから送信メール内容を取得<br />
③添付ファイルをメールオブジェクトに貼り付ける<br />
④メールを送信する<br />
⑤次のシートを同様に処理</p>
</div>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的　　　 ：シート分のメールを送信する
'==============================
Sub SendMail_Click()

　　Dim MyDir As String　　　　　　　　　　　　　　　　　　　'自分のファイルが存在するディレクトリ格納用
　　Dim i As Long　　　　　　　　　　　　　　　　　　　　　　'ループ用変数
　　Dim j As Long　　　　　　　　　　　　　　　　　　　　　　'ループ用変数
　　Dim SheetCnt As Long　　　　　　　　　　　　　　　　　　　'シート数を格納する変数
　　Dim SheetName As String　　　　　　　　　　　　　　　　　'シート名を格納する変数

　　Dim ToAddress As String　　　　　　　　　　　　　　　　　'Toアドレス用の変数
　　Dim CcAddress As String　　　　　　　　　　　　　　　　　'Ccアドレス用の変数
　　Dim BccAddress As String　　　　　　　　　　　　　　　　'Bccアドレス用の変数
　　Dim FromAddress As String　　　　　　　　　　　　　　　　'Fromアドレス用の変数
　　Dim cdoMsg As Object　　　　　　　　　　　　　　　　　　'CDOメッセージオブジェクト用変数
　　Dim cdoConf As Object　　　　　　　　　　　　　　　　　'CDOコンフィグレーションオブジェクト用変数
　　Dim strMailBody As String　　　　　　　　　　　　　　　'メール本文用の変数
　　Dim strSubject As String　　　　　　　　　　　　　　　　'件名用の変数
　　Dim strSignature As String　　　　　　　　　　　　　　　'署名用の変数
　　Dim strAttachmentPath As String　　　　　　　　　　　　'添付ファイルの格納用変数
　　Dim strAttachmentsPath() As String　　　　　　　　　　'添付ファイルの格納配列
　　Dim strSendAccount As String　　　　　　　　　　　　　　'送信するアカウント
　　
　　'固定値をセット(長いと見づらいため)
　　Const cstUnderscore As String = "_"　　　　　　　　　 'アンダーバー
　　Const cstSendusing As String = "http://schemas.microsoft.com/cdo/configuration/sendusing"
　　Const cstSmtpserver As String = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
　　Const cstSmtpserverport As String = "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
　　Const cstSendusername As String = "http://schemas.microsoft.com/cdo/configuration/sendusername"
　　Const cstSendpassword As String = "http://schemas.microsoft.com/cdo/configuration/sendpassword"
　　Const cstSmtpauthenticate As String = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
　　Const cstSmtpusessl As String = "http://schemas.microsoft.com/cdo/configuration/smtpusessl"

　　'エラー時はErrCatchラベルへ
　　On Error GoTo ErrCatch
　　
　　'-------シート枚数分ループ(2枚目のシートから)-------
　　'自分の配置されているパスを取得
　　MyDir = ThisWorkbook.Path
　　
　　'シート件数を取得
　　SheetCnt = ThisWorkbook.Sheets.Count
　　
　　For i = 2 To SheetCnt
　　
　　　　'----------送信元アカウント情報を設定(メインシートから取得)----------
　　　　'CDOをオブジェクト作成
　　　　Set cdoMsg = CreateObject("CDO.Message")
　　　　Set cdoConf = CreateObject("CDO.Configuration")
　　　　
　　　　cdoConf.Load -1
　　　　
　　　　'送信元アカウントを取得
　　　　strSendAccount = Sheets(1).Range("SendAccount").Value
　　　　
　　　　'送信元アカウントが未選択の場合終了
　　　　If strSendAccount = "" Then
　　　　　　MsgBox "送信元アカウントを設定してください。"
　　　　　　End
　　　　End If
　　　　
　　　　'送信元アカウントにアンダーバーをセット
　　　　strSendAccount = strSendAccount + cstUnderscore
　　　　
　　　　With cdoConf.Fields
　　　　　　.Item(cstSendusing) = 2
　　　　　　.Item(cstSmtpserver) = Sheets(1).Range(strSendAccount &amp; "smtpserver").Value
　　　　　　.Item(cstSmtpserverport) = Sheets(1).Range(strSendAccount &amp; "smtpserverport").Value
　　　　　　.Item(cstSendusername) = Sheets(1).Range(strSendAccount &amp; "sendusername").Value
　　　　　　.Item(cstSendpassword) = Sheets(1).Range(strSendAccount &amp; "sendpassword").Value
　　　　　　.Item(cstSmtpauthenticate) = True
　　　　　　.Item(cstSmtpusessl) = True
　　　　　　.Update
　　　　End With
　　　　
　　　　'Fromアドレス取得
　　　　FromAddress = Sheets(1).Range(strSendAccount &amp; "From").Value
　　　　
　　　　'重要度を変更
　　　　cdoMsg.Fields.Item("urn:schemas:mailheader:X-Priority") = 1
　　　　cdoMsg.Fields.Update
　　　　
　　　　'-------各メールフォーマットから取得-------
　　　　'シート名を取得
　　　　SheetName = Sheets(i).Name

　　　　'-------メール情報を取得-------
　　　　'セル内改行(LF)はCRLFに置換 → Yahooでは落ちるため
　　　　ToAddress = Replace(Sheets(i).Range("Mail_TO").Value, vbLf, vbCrLf)　　　　　　'To宛先
　　　　CcAddress = Replace(Sheets(i).Range("Mail_CC").Value, vbLf, vbCrLf)　　　　　　'cc宛先
　　　　BccAddress = Replace(Sheets(i).Range("Mail_BCC").Value, vbLf, vbCrLf)　　　　　'bcc宛先
　　　　strSubject = Replace("【" &amp; SheetName &amp; "様】" &amp; _
　　　　　　　　　　　　　　Sheets(i).Range("Mail_Subject").Value, vbLf, vbCrLf)　　　　'件名
　　　　strMailBody = Replace(Sheets(i).Range("Mail_Body").Value, vbLf, vbCrLf)　　　　'メール本文
　　　　strSignature = Replace(Sheets(i).Range("Mail_Signature").Value, vbLf, vbCrLf)　'署名
　　
　　　　'-------メールに情報をセットする-------
　　　　With cdoMsg
　　　　　　Set .Configuration = cdoConf
　　　　　　.From = FromAddress
　　　　　　.To = ToAddress
　　　　　　.CC = CcAddress
　　　　　　.BCC = BccAddress
　　　　　　.MDNRequested = True
　　　　　　.Subject = strSubject
　　　　　　.TextBody = strMailBody &amp; vbCrLf &amp; vbCrLf &amp; strSignature
　　　　　　.BodyPart.Charset = "utf-8"
　　　　End With
　　　　
　　　　'-------添付ファイルを貼り付ける-------
　　　　'[yyyymmdd_会社名].[拡張子]を検索し、取得する
　　　　strAttachmentsPath() = FileSearch(Format(Now(), "yyyymmdd") &amp; "_" &amp; SheetName &amp; ".*", MyDir &amp; "\添付ファイル\")  '"

        If strAttachmentsPath(0) = "dummy" Then
            '添付ファイルが一件もなければ、次のメール処理へ行く(発注連絡が不要なため)
            GoTo nextDO
        Else
            '添付ファイルが一件でもあれば添付
    
                'ファイル件数分ループして添付する
                For j = 0 To UBound(strAttachmentsPath())
                    'ファイルパスを取得
                    strAttachmentPath = strAttachmentsPath(j)
    
                    'ファイルを添付
                    cdoMsg.AddAttachment strAttachmentPath
                Next j
        End If

　　　　'-------メールを送信する-------
　　　　'メール送信
　　　　cdoMsg.Send

nextDO:
　　　　'-------Outlookを閉じる(オブジェクトを解放)---
　　　　Set cdoMsg = Nothing
　　　　Set cdoConf = Nothing

　　Next i
　　
　　MsgBox "送信が完了しました。"
　　
'エラーキャッチ
ErrCatch:
　　
　　' エラーの場合、エラーメッセージを表示する
　　Call ShowErrMsg
　　
End Sub</pre><p></p>
<h3>メール送信処理の解説</h3>
<h4>送信元アカウント情報を設定(メインシートから取得)</h4>
<p>strSendAccount = Sheets(1).Range(&#8220;SendAccount&#8221;).Value</p>
<p>でメインシートの名前「SendAccount」からアカウント名を取得しています。</p>
<p>その後取得したアカウント名とSMTPServerやPortNumberの名前を文字連結して送信するための情報を取得しています。</p>
<p>送信元アカウントでGmailを選んだなら.Range(strSendAccount &amp; &#8220;smtpserver&#8221;).Valueの中身はRange(&#8220;Gmail_smtpserverport)&#8221;.Value</p>
<p>Yahooを選んだならRange(&#8220;Yahoo_smtpserverport&#8221;).Valueのようになります。</p>
<h4><strong>メール情報を取得</strong></h4>
<p>ここでは改行コードLFをCRLFに置換しています。</p>
<p>なぜかと言うとYahooで送信する場合は、エラーになるためです。</p>
<blockquote><p>改行コードがCRとLFではなく、LFだけの行があるために、エラー<br />
<a href="https://ajya.hatenablog.jp/entry/2012/03/22/223917">メールが送信できるようになった</a>　より</p></blockquote>
<p>改行があっても動いて欲しいものですが、仕様なら仕方ありませんね&#8230;</p>
<h4>メールに情報をセットする</h4>
<p>ここではメールのオブジェクトに件名や宛先などをセットしています。</p>
<h4>添付ファイルを貼り付ける</h4>
<p>FileSearchメソッドを使って、添付ファイルのパスを取得しメールのオブジェクトに張り付ける処理を行っています。</p>
<p>FileSearchは後で説明を記載しています。</p>
<p>その後、添付ファイルがない場合、メールは送らず次のシートを処理するようになっています。</p>
<p>※発注連絡という想定なので、発注書の添付ファイルがなければ連絡はする必要がないから送らないという考え方です。</p>
<h2 id="03">メール添付ファイル取得 FileSearchメソッド</h2>
<p>送信対象のファイル([yyyymmdd_シート名.拡張子]フォーマット)のファイル名を検索し配列に格納する処理です。</p>
<p>検索する場所は「..\VBA Outlookメール送信\添付ファイル」以下のみです。</p>
<p>他の場所に配置したファイルは添付ファイルとして検索されません。</p>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的　　　 ：添付ファイルを検索し、ファイルのパスを取得する
'引数　　　 ：SearchText　　　　　　　　　検索するファイル名
'　　　　　　　：SearchPath　　　　　　　　 検索するパス
'戻り値　　　: ファイルパスの配列
'==============================
Private Function FileSearch(SearchText As String, SearchPath As String) As String()

    Dim FileName As String
    Dim Cnt As Long
    Dim Files() As String                         'ファイルパス格納用配列
    
    '中身をダミー値でセット
    ReDim Files(0)
    Files(0) = "dummy"
    
    'ファイルを検索
    FileName = Dir(SearchPath &amp; "\" &amp; SearchText)
    
    Do While FileName &lt;&gt; ""
        
        'ファイル名を返却用配列に格納
        ReDim Preserve Files(Cnt) As String
        Files(Cnt) = SearchPath &amp; FileName
        Cnt = Cnt + 1
        
        ' 次のファイル名を参照
        FileName = Dir()
    Loop

    FileSearch = Files()
　　
End Function</pre><p></p>
<h3>解説</h3>
<p>引数として受け取った検索フォルダ(SearchPath)を検索条件(SearchText)を元に検索します。</p>
<p>見つかったファイルのパスを配列に格納していきます。</p>
<p>検索条件に一致するファイルが見つからなくなったら配列を呼び出し元に返しています。</p>
<h2 id="04">エラー表示 ShowErrMsgメソッド</h2>
<p>エラーをキャッチするメソッドです。</p>
<p>予測できないエラーがあればここでキャッチしてエラーがあったことをメッセージ表示します。</p>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的　　　 ：エラーの場合、エラーメッセージを表示する
'==============================
Public Sub ShowErrMsg()

　　'エラーがあればメッセージ表示
　　If Err.Number &lt;&gt; 0 Then
　　　　MsgBox "想定外のエラーが発生しました。" &amp; vbCrLf + _
　　　　　　　　"エラー番号：" + CStr(Err.Number) &amp; vbCrLf + _
　　　　　　　　"エラーの種類：" + Err.Description
　　End If

End Sub</pre><p></p>
<h3>解説</h3>
<p>エラーがあった場合、そのエラー番号とエラー内容をメッセージ表示します。</p>
<h4>送信結果</h4>
<p>送信結果はこんなメールです。</p>
<a href="https://loosecarrot.com/2018/12/05/1576/%e9%80%81%e4%bf%a1%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab/" rel="attachment wp-att-1612"><img loading="lazy" decoding="async" class="alignnone size-large_size wp-image-1612" src="https://loosecarrot.com/wp-content/uploads/2018/12/d2416ca41f0f1ed0cc7b71487410bcb3-936x720.png" alt="" width="936" height="720" srcset="https://loosecarrot.com/wp-content/uploads/2018/12/d2416ca41f0f1ed0cc7b71487410bcb3-936x720.png 936w, https://loosecarrot.com/wp-content/uploads/2018/12/d2416ca41f0f1ed0cc7b71487410bcb3-936x720.png 856w" sizes="(max-width: 936px) 100vw, 936px" /></a>
<a href="https://loosecarrot.com/2022/01/23/5431/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2022/01/GoogleSpreadSheetから予定を自動メールお知らせ_1-2-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">GoogleSpreadSheetから自動で予定をメールお知らせ</span><span class="blog-card-excerpt">

予定がいっぱいあると、忘れてしまいがちなので、事前に通知してくれるアプリが欲しいと思っていました。

なので、以前C#で予定...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<div class="concept-box5">
<p>・メールを送信する<br />
<a href="http://officetanaka.net/excel/vba/tips/tips45.htm">http://officetanaka.net/excel/vba/tips/tips45.htm</a><br />
・「 Gmailで相手に一斉に送信するエクセルマクロ」のコメント一覧<br />
<a href="http://bzowner.blog.fc2.com/blog-entry-2.html?sp&amp;m2=res">http://bzowner.blog.fc2.com/blog-entry-2.html?sp&amp;m2=res</a><br />
・CDO.Messageによるメール送信<br />
<a href="http://serialty.blog117.fc2.com/blog-entry-10.html">http://serialty.blog117.fc2.com/blog-entry-10.html</a><br />
・iCloud メールクライアント向けのメールサーバ設定<br />
<a href="https://support.apple.com/ja-jp/HT202304">https://support.apple.com/ja-jp/HT202304</a><br />
・CDOでメール送信<br />
<a href="http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html">http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html</a><br />
・VBAでメール送信する<br />
<a href="https://excel-ubara.com/excelvba4/EXCEL233.html">https://excel-ubara.com/excelvba4/EXCEL233.html</a><br />
・VBAでGmail送信！CDOを活用してメールを操作する方法<br />
<a href="http://www.fastclassinfo.com/entry/vba_gmail_sendmail">http://www.fastclassinfo.com/entry/vba_gmail_sendmail</a><br />
・メールが送信できるようになった<br />
<a href="https://ajya.hatenablog.jp/entry/2012/03/22/223917">https://ajya.hatenablog.jp/entry/2012/03/22/223917</a><br />
・CDO の概要<br />
<a href="https://msdn.microsoft.com/ja-jp/library/cc446847.aspx">https://msdn.microsoft.com/ja-jp/library/cc446847.aspx</a></p>
<p>・【Excel VBA】【マクロ】【Tips】Sgn関数はExcel64bit版では使えない？</p>
<p><a href="https://lenoco.tokyo/?p=136" target="_blank" rel="noopener">https://lenoco.tokyo/?p=136</a></p>
</div>The post <a href="https://loosecarrot.com/2018/12/02/1576/">Excel VBA メール送信ツール(フリーメール)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/12/02/1576/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1576</post-id>	</item>
		<item>
		<title>Excel VBA メール送信ツール(Outlook)</title>
		<link>https://loosecarrot.com/2018/12/01/1551/</link>
					<comments>https://loosecarrot.com/2018/12/01/1551/#respond</comments>
		
		<dc:creator><![CDATA[LooseCarrot]]></dc:creator>
		<pubDate>Fri, 30 Nov 2018 15:01:29 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel]]></category>
		<guid isPermaLink="false">https://loosecarrot.com/?p=1551</guid>

					<description><![CDATA[<p>VBAでOutlookのメール送信について紹介します。 自動でOutlookのメール送信するツールを作ってみました。 実際に作ったファイルはこちらから無料でダウンロードできます。 メール(Outlook)用の参照設定 フ</p>
The post <a href="https://loosecarrot.com/2018/12/01/1551/">Excel VBA メール送信ツール(Outlook)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></description>
										<content:encoded><![CDATA[<p>VBAでOutlookのメール送信について紹介します。</p>
<p>自動でOutlookのメール送信するツールを作ってみました。</p>
<p>実際に作ったファイルはこちらから<a href="https://www.dropbox.com/scl/fi/3v13lr0vpzxfc96cm9xs1/VBA-Outlook.zip?rlkey=vfxyp5w53ywzadpmlqncso7ri&amp;dl=1">無料でダウンロード</a>できます。</p>
<h2 id="01">メール(Outlook)用の参照設定</h2>
<p>ファイル用もフォルダ用もダイアログを開くに参照設定を必要です。</p>
<p>手順はコードエディターから「ツール(T)」→「参照設定(R)」と移動します。</p>
<p>その後、Microsoft Outlook 16.0 Object Libraryにチェックを付けておいてください。</p>
<p>16.0はバージョンに寄ります。</p>
<a href="https://loosecarrot.com/2018/12/01/1551/%e5%8f%82%e7%85%a7%e8%a8%ad%e5%ae%9a/" rel="attachment wp-att-1564"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1564" src="https://loosecarrot.com/wp-content/uploads/2018/11/afb8b3b96b136d6781fd1a39e0879f17.png" alt="" width="454" height="315" /></a>
<h2 id="02">メール(Outlook)送信処理のコード</h2>
<p>処理の流れは以下の順です。</p>
<div class="simple-box3">
<p>①メール情報(件名、宛先など)を取得<br />
②メールに情報をセットする<br />
③添付ファイルを貼り付ける<br />
④メールを送信する<br />
⑤次のエクセルシートの情報を読取って①から～④を繰り返す</p>
</div>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的　　　 ：シート分のメールを送信する
'==============================
Sub SendMail_Click()
　　
　　Dim MyDir As String　　　　　　　　　　　　　　　　　'自分のファイルが存在するディレクトリ格納用
　　Dim i As Long　　　　　　　　　　　　　　　　　　　　　'ループ用変数
　　Dim j As Long　　　　　　　　　　　　　　　　　　　　　'ループ用変数
　　Dim SheetCnt As Long　　　　　　　　　　　　　　　　　'シート数を格納する変数
　　Dim SheetName As String　　　　　　　　　　　　　　　'シート名を格納する変数
　　
　　Dim ToAddress As String　　　　　　　　　　　　　　　'Toアドレス用の変数
　　Dim CcAddress As String　　　　　　　　　　　　　　　'Ccアドレス用の変数
　　Dim BccAddress As String　　　　　　　　　　　　　　'Bccアドレス用の変数
　　Dim Subject As String　　　　　　　　　　　　　　　　'件名用の変数
　　Dim MailBody As String　　　　　　　　　　　　　　　'メール本文用の変数
　　Dim Signature As String　　　　　　　　　　　　　　'署名用の変数
　　Dim OutlookObj As Outlook.Application　　　　　　'Outlookで使用するオブジェクト生成
　　Dim MailItemObj As Outlook.MailItem　　　　　　　'Outlookで使用するオブジェクト生成
　　Dim Attachments As Outlook.Attachments　　　　 'Outlookで使用するオブジェクト生成
　　Dim AttachmentPath As String　　　　　　　　　　　'添付ファイルの格納用変数
　　Dim AttachmentsPath() As String　　　　　　　　　'添付ファイルの格納配列
　　
　　
　　'自分の配置されているパスを取得
　　MyDir = ThisWorkbook.Path
　　
　　'シート件数を取得
　　SheetCnt = ThisWorkbook.Sheets.Count

　　'-------シート枚数分ループ(2枚目のシートから)-------
　　For i = 2 To SheetCnt
　　
　　　　'シート名を取得
　　　　SheetName = Sheets(i).Name

　　　　'-------メール情報を取得-------
　　　　ToAddress = Sheets(i).Range("Mail_TO").Value　　　　　　　　　'To宛先
　　　　CcAddress = Sheets(i).Range("Mail_CC").Value　　　　　　　　　'cc宛先
　　　　BccAddress = Sheets(i).Range("Mail_BCC").Value　　　　　　　　'bcc宛先
　　　　Subject = "【" &amp; SheetName &amp; "様】" &amp; _
　　　　　　　　　　　　Sheets(i).Range("Mail_Subject").Value　　　　　'件名
　　　　MailBody = Sheets(i).Range("Mail_Body").Value　　　　　　　　'メール本文
　　　　Signature = Sheets(i).Range("Mail_Signature").Value　　　　 '署名
　　
　　　　'-------メールに情報をセットする-------
　　　　Set OutlookObj = CreateObject("Outlook.Application")
　　　　Set MailItemObj = OutlookObj.CreateItem(olMailItem)
　　　　MailItemObj.BodyFormat = 2　　　　　　　　　　　　　　　　　　　　　　　'HTML形式に変更
　　　　MailItemObj.To = ToAddress　　　　　　　　　　　　　　　　　　　　　　　'to宛先をセット
　　　　MailItemObj.CC = CcAddress　　　　　　　　　　　　　　　　　　　　　　　'cc宛先をセット
　　　　MailItemObj.BCC = BccAddress　　　　　　　　　　　　　　　　　　　　　　'bcc宛先をセット
　　　　MailItemObj.Subject = Subject　　　　　　　　　　　　　　　　　　　　　 '件名をセット
　　　　MailItemObj.Body = MailBody &amp; vbCrLf &amp; vbCrLf &amp; Signature　　　 '本文+署名
　　　　
　　　　'-------添付ファイルを貼り付ける-------'
　　　　'オブジェクト生成
　　　　Set Attachments = MailItemObj.Attachments
　　　　
　　　　'[yyyymmdd_会社名].[拡張子]を検索し、取得する'
　　　　AttachmentsPath() = FileSearch(Format(Now(), "yyyymmdd") &amp; "_" &amp; SheetName &amp; ".*", MyDir &amp; "\添付ファイル\")　'"
　　　　

        If AttachmentsPath(0) = "dummy" Then
            '添付ファイルが一件もなければ、次のメール処理へ行く(発注連絡が不要なため)
            GoTo nextDO
        Else
            '添付ファイルが一件でもあれば添付
    
                'ファイル件数分ループして添付する
                For j = 0 To UBound(AttachmentsPath())
                    'ファイルパスを取得
                    AttachmentPath = AttachmentsPath(j)
    
                    'ファイルを添付
                    Attachments.Add AttachmentPath
    
                Next j
    
        End If
　　
　　　　'-------メールを送信する-------
　　　　MailItemObj.Send
　　
　　　　'-------Outlookを閉じる(オブジェクトを解放)---
　　　　Set OutlookObj = Nothing
　　　　Set MailItemObj = Nothing
　　　　
nextDO:
　　Next i
　　
　　MsgBox "送信が完了しました。"
　　
End Sub</pre><p></p>
<h3>解説</h3>
<h4><strong>メール情報を取得</strong></h4>
<p>重要なポイントは名前の定義をしていることです。</p>
<p>宛先Toであれば「Mail_TO」のようにすべてのシートに設定がしてあります。</p>
<p>各シートに全て同じ名前を付けることで同じ処理をシートごとに繰り返せるようにしています。</p>
<p>そして各シートの値は変数に格納していく処理になっています。</p>
<p>※シートをコピーして増やしても名前の定義は引き継がれるため処理に問題はありません。</p>
<h4>メールに情報をセットする</h4>
<p>Outlookのオブジェクトを生成していま。</p>
<p>その後、それぞれToや本文の情報をOutlookのオブジェクトにセットしていっています。</p>
<h4>添付ファイルを貼り付ける</h4>
<p>まず添付ファイルのオブジェクト生成しています。</p>
<p>FileSearchメソッドを使って、添付ファイルのパスを取得しメールのオブジェクトに張り付ける処理を行っています。</p>
<p>FileSearchは後で説明を記載しています。</p>
<p>その後、添付ファイルがない場合、メールは送らず次のシートを処理するようになっています。</p>
<p>※発注連絡という想定なので、発注書の添付ファイルがなければ連絡はする必要がないから送らないという考え方です。</p>
<h4>メールを送信する・Outlookを閉じる</h4>
<p>最後にメールを送信します。</p>
<p>その後、作成したオブジェクトは破棄して次のメール作成・送信処理へ行きます。</p>
<h2 id="03">メール添付ファイル取得 FileSearchメソッド</h2>
<p>送信対象のファイル([yyyymmdd_シート名.拡張子]フォーマット)のファイル名を検索し配列に格納する処理です。</p>
<p>検索する場所は「..\VBA Outlookメール送信\添付ファイル」以下のみです。</p>
<p>他の場所に配置したファイルは添付ファイルとして検索されません。</p>
<h3>コード</h3>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">'==============================
'目的　　　 ：添付ファイルを検索し、ファイルのパスを取得する
'引数　　　 ：SearchText　　　　　　　　　検索するファイル名
'　　　　　　：SearchPath　　　　　　　　 検索するパス
'戻り値　　　: ファイルパスの配列
'==============================
Private Function FileSearch(SearchText As String, SearchPath As String) As String()
    Dim FileName As String
    Dim Cnt As Long
    Dim Files() As String                         'ファイルパス格納用配列
    
    '中身をダミー値でセット
    ReDim Files(0)
    Files(0) = "dummy"
    
    'ファイルを検索
    FileName = Dir(SearchPath &amp; "\" &amp; SearchText)
    
    Do While FileName &lt;&gt; ""
        
        'ファイル名を返却用配列に格納
        ReDim Preserve Files(Cnt) As String
        Files(Cnt) = SearchPath &amp; FileName
        Cnt = Cnt + 1
        
        ' 次のファイル名を参照
        FileName = Dir()
    Loop

　　FileSearch = Files()
　　
End Function</pre><p></p>
<h3>解説</h3>
<p>引数として受け取った検索フォルダ(SearchPath)を検索条件(SearchText)を元に検索します。</p>
<p>見つかったファイルのパスを配列に格納していきます。</p>
<p>検索条件に一致するファイルが見つからなくなったら配列を呼び出し元に返しています。</p>
<h4>送信結果</h4>
<p>送信結果はこんなメールです。</p>
<a href="https://loosecarrot.com/2018/12/01/1551/%e9%80%81%e4%bf%a1%e3%83%a1%e3%83%bc%e3%83%ab%e3%82%b5%e3%83%b3%e3%83%97%e3%83%ab/" rel="attachment wp-att-1566"><img loading="lazy" decoding="async" class="alignnone size-large_size wp-image-1566" src="https://loosecarrot.com/wp-content/uploads/2018/12/a1919b8b188643a640d643e5b2617865-630x720.png" alt="" width="630" height="720" /></a>
<p>メール送信と言いつつガチガチに業務を想定したツールになってしまっています&#8230;</p>
<p>使えそうなところをアレンジしていってみてください。</p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<div class="concept-box5">
<p>・【エクセルVBA】Outlookでメールを作成・送信する方法<br />
<a href="https://tonari-it.com/excel-vba-outlook-mail-send/">https://tonari-it.com/excel-vba-outlook-mail-send/</a><br />
・VBAでメールを自動送信！エクセルマクロでoutlook操作する方法<br />
<a href="http://www.fastclassinfo.com/entry/vba_outlook_sendmail">http://www.fastclassinfo.com/entry/vba_outlook_sendmail</a><br />
・シートを指定してRangeを取得する<br />
<a href="https://www.relief.jp/docs/excel-vba-get-range-specific-sheet.html">https://www.relief.jp/docs/excel-vba-get-range-specific-sheet.html</a><br />
・PDF発注書テンプレート<br />
<a href="https://pdf.wondershare.jp/templates/purchase-order-template.html">https://pdf.wondershare.jp/templates/purchase-order-template.html</a><br />
・FileSystemObjectオブジェクト &#8211; FileExistsメソッド<br />
<a href="http://officetanaka.net/excel/vba/filesystemobject/filesystemobject10.htm">http://officetanaka.net/excel/vba/filesystemobject/filesystemobject10.htm</a><br />
・ファイルの一覧を取得する<br />
<a href="http://officetanaka.net/excel/vba/file/file07.htm">http://officetanaka.net/excel/vba/file/file07.htm</a></p>
</div>
<p>&nbsp;</p>
<a href="https://loosecarrot.com/2018/12/02/1576/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/email-excel-vba-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Excel VBA メール送信ツール(フリーメール)</span><span class="blog-card-excerpt">VBAでメール送信について紹介します。

自動でメール送信するツールを作ってみました。

今回はOutlookではなくフリーメー...</span></div></div></a>The post <a href="https://loosecarrot.com/2018/12/01/1551/">Excel VBA メール送信ツール(Outlook)</a> first appeared on <a href="https://loosecarrot.com">文系出身のSEですが、何か</a>.]]></content:encoded>
					
					<wfw:commentRss>https://loosecarrot.com/2018/12/01/1551/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1551</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>
<a href="https://loosecarrot.com/2018/12/09/1800/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/302908301226fed6a1fb99c29d1a0594-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">VBA C# オススメ参考書</span><span class="blog-card-excerpt">プログラミングの参考書でオススメの紹介をしていきます。

それぞれ私が使っている言語のみです。

VBAのオススメ参考書をExc...</span></div></div></a>
<h3>解説</h3>
<p>FileDialogのShowでダイアログを出します。</p>
<p>ダイアログで選択したファイルがある場合intRetには結果引数として「-1」が返ってきます。</p>
<p>ファイルを選択しなかった場合、「0」が結果引数として返ってきます。</p>
<p>ファイルを選択した場合、SelectedItems.Item(1)にファイルのパスが取得されます。</p>
<p>例えば、ダイアログから取得したファイルパスを使ってエクセルをAccessに取込むというような処理に使えそうですね。</p>
<a href="https://loosecarrot.com/2018/11/26/1510/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/11/importExcel-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Access エクセル取込み 複数シート</span><span class="blog-card-excerpt">Accessに複数シートをのエクセルを一括で取り込める機能が欲しかったのですが、ありませんでした。

作ってみたので残しておきます。...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2018/11/20/1459/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/11/database_p-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">RecordSetからcsv、tsvファイルを出力する</span><span class="blog-card-excerpt">Accessのテーブルからtsvファイルを出力しようとしたところ、意外と簡単に出す方法がありませんでした。

備忘録のために残してお...</span></div></div></a>
<h3>補足</h3>
<p><strong>・複数フォルダ選択</strong></p>
<p>複数フォルダ選択はできないようです。</p>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2018/11/28/1511/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/11/a7151aed720fb4e61301677efe03c1cf-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">Access VBA ダイアログからパス取得</span><span class="blog-card-excerpt">VBAでファイルダイアログを開く処理について紹介します。

実際に作ったファイルはこちらからダウンロードできます。
ダイアログ用の...</span></div></div></a>
<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>
<h3>補足</h3>
<p>４９行目のテーブルデータ削除についてです。</p>
<p>以下の処理で一度テーブルデータを一括削除してからテーブルに取込んでいます。</p>
<p>削除しないとどんどん行数が増え続けていくためです。</p>
<h4>DoCmd.RunSQL &#8220;DELETE * FROM &#8221; &amp; SheetNames(i)の中身</h4>
<p>指定したテーブル名を引数に受け取っています。</p>
<p>そして指定したテーブルのレコードすべてを削除するようにしています。</p>
<a href="https://loosecarrot.com/2018/12/09/1800/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/302908301226fed6a1fb99c29d1a0594-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">VBA C# オススメ参考書</span><span class="blog-card-excerpt">プログラミングの参考書でオススメの紹介をしていきます。

それぞれ私が使っている言語のみです。

VBAのオススメ参考書をExc...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2018/12/09/1800/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/302908301226fed6a1fb99c29d1a0594-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">VBA C# オススメ参考書</span><span class="blog-card-excerpt">プログラミングの参考書でオススメの紹介をしていきます。

それぞれ私が使っている言語のみです。

VBAのオススメ参考書をExc...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2018/11/20/1459/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/11/database_p-320x180.png" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">RecordSetからcsv、tsvファイルを出力する</span><span class="blog-card-excerpt">Accessのテーブルからtsvファイルを出力しようとしたところ、意外と簡単に出す方法がありませんでした。

備忘録のために残してお...</span></div></div></a>
<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>
<a href="https://loosecarrot.com/2019/02/11/3167/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/02/おすすめのプログラミングスクール-めざせ就職・年収アップ！_0-1-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">おすすめのプログラミングスクール めざせ就職・年収アップ！</span><span class="blog-card-excerpt">

プログラミングを独学でされている人は意外と多いです。

ただ、プログラミングの独学は簡単にはいきません。

自分だけの力...</span></div></div></a>
<a href="https://loosecarrot.com/2018/12/09/1775/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2018/12/8214a4f1973e7caf419465b3dcc3ffd7-320x180.jpg" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミング初心者の独学方法 文系卒の経験談</span><span class="blog-card-excerpt">

私はIT系の会社に勤めて4年目ですが、最初の1年は開発をさせてもらえませんでした。

文系卒でプログラミング経験はなかったの...</span></div></div></a>
<a href="https://loosecarrot.com/2019/01/28/3054/" class="blog-card"><div class="blog-card-hl-box"><i class="jic jin-ifont-post"></i><span class="blog-card-hl"></span></div><div class="blog-card-box"><div class="blog-card-thumbnail"><img decoding="async" src="https://loosecarrot.com/wp-content/uploads/2019/01/beginner_se_error1-320x180.gif" class="blog-card-thumb-image wp-post-image" alt="" width ="162" height ="91" /></div><div class="blog-card-content"><span class="blog-card-title">プログラミングの独学とはエラーとの闘い</span><span class="blog-card-excerpt">

プログラミングを勉強し始めた初心者の方はつまづくことが多いと思います。

私も最初はエラーが出るたびにいちいちビビッて、意味...</span></div></div></a>
<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>
	</channel>
</rss>
