作成した帳票をフォルダに自動保存するVBA

invoice3tenhozoneyecatch

適格請求書対応のインボイス見積納品請求伝票日付版で、今回は作成した帳票を、数クリックだけで自動保存するVBAの解説です。
特に件数をこなす場合、この自動保存は便利です。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAソフトのインボイス見積納品請求伝票日付版、今回は、作成完了した帳票を保存する作業をVBAでプログラム化します。

帳票保存の方法は、

「請求書」「納品書」「見積書」の3シートを取り出して(コピーして)、マクロなしエクセルブックとして一纏めにして保存します。

保存先は、既定にある保存フォルダ(「作成伝票」フォルダ )内に保存することになります。フォルダ内には3階層までのフォルダを作ることが出来ます。

ファイル名は自動で、「 3階層の保存フォルダ名+請求書+年月日時刻.xlsx 」が割り振られます。

保存場所の変更やリネームは、自動保存後に行うことが出来ます。

インボイス見積納品請求3点伝票作成の記事編成

帳票保存完了時のフォルダ

invoice3tenhozonp002

保存先とファイル名はこのようになります。

invoice3tenhozonp001

保存ファイル名は、2階層目のフォルダに保存する場合は2枚層までの名前(この場合だと「A市役所B建設部請求書_230926-2008」)というように、階層に合わせて変化します。

保存を行うVBAコード

invoice3tenhozonp003

ユーザーフォームの「帳票保存」ボタンをクリック、または、「印刷時自動保存」チェックボックスをチェックすると、実行されるプロシージャーを設計します。

VBA 全コード

ここではModule4に記述しています。

VBA
Option Explicit

Sub 伝票保存()
    Dim Mypath, FolderPathD As String
    Dim Shell As Object
    Dim Newbook As Object
    Dim FP, FPN, FPM, FPMN As String
    Dim FPL, FPLN, FN, NbkN As String
    Dim a As Long
'保存フォルダを選択
        Mypath = ThisWorkbook.Path & "\作成伝票"
    
        Set Shell = CreateObject("Shell.Application") _
            .BrowseForFolder(0, "フォルダを選択してください", _
                        &H1, Mypath)
        If Shell Is Nothing Then
            FolderPathD = ""
            Exit Sub
        Else
            FolderPathD = Shell.Items.Item.Path
        End If
'フォルダ名の取得
        FP = FolderPathD
        FPN = Mid(FP, InStrRev(FP, "\") + 1)
        FPM = Left(FP, InStrRev(FP, "\") - 1)
        FPMN = Mid(FPM, InStrRev(FPM, "\") + 1)
        FPL = Left(FPM, InStrRev(FPM, "\") - 1)
        FPLN = Mid(FPL, InStrRev(FPL, "\") + 1)
'ファイルを保存
        ChDir FP
        Set Newbook = Workbooks.Add
        For a = 2 To 4
            ThisWorkbook.Activate
            Worksheets(a).Cells.Copy
            Newbook.Activate
            Worksheets("sheet" & a - 1).Select
            With ActiveSheet
                .Paste
                .Name = ThisWorkbook.Worksheets(a).Name
'行高さ設定
                .Rows.RowHeight = 24
                .Rows("1:12").RowHeight = 19.5
                .Rows(1).RowHeight = 29.25
                .Rows(2).RowHeight = 9
                .Rows(4).RowHeight = 7.5
                .Rows("7:10").RowHeight = 15.75
                .Rows(11).RowHeight = 15.75
                .Rows(12).RowHeight = 7.5
                .Rows("13:14").RowHeight = 15.75
'列幅の設定
                .Columns("A").ColumnWidth = 3.5
                .Columns("B").ColumnWidth = 7.25
                .Columns("C").ColumnWidth = 27.63
                .Columns("D").ColumnWidth = 9.13
                .Columns("E").ColumnWidth = 6.63
                .Columns("F").ColumnWidth = 6
                .Columns("G").ColumnWidth = 4.75
                .Columns("H").ColumnWidth = 13.5
                .Columns("I").ColumnWidth = 7.5
'印刷余白の設定
                With .PageSetup
                    .TopMargin = Application _
                                        .CentimetersToPoints(1.5)
                    .LeftMargin = Application _
                                        .CentimetersToPoints(2)
                    .RightMargin = Application _
                                        .CentimetersToPoints(1)
                    .BottomMargin = Application _
                                        .CentimetersToPoints(1)
                    .HeaderMargin = Application _
                                        .CentimetersToPoints(0.5)
                    .FooterMargin = Application _
                                        .CentimetersToPoints(0.5)
'プリントタイトル
                    .PrintTitleRows = "$15:$15"
'ページ番号
                    .CenterFooter = "&P"
                End With
            End With
            Application.CutCopyMode = False
        Next a
'保存ファイルに名前を付ける
        FN = Format(Now(), "yymmdd-hhmm")
        With Newbook
            If FPN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                            & FPN & "請求書_" & FN & ".xlsx"
            ElseIf FPMN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                            & FPN & "請求書_" & FN & ".xlsx"
            ElseIf FPLN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                        & FPMN & FPN & "請求書_" & FN & ".xlsx"
            Else
                .SaveAs Filename:=FolderPathD & "\" _
                & FPLN & FPMN & FPN & "請求書_" & FN & ".xlsx"
            End If
            NbkN = .Name
            .Close
        End With
        ThisWorkbook.Activate
        Worksheets("作業シート").Activate
        Range("A1").Select
        MsgBox NbkN & " で帳票の保存を行ないました。", _
                    vbInformation, "インボイス見積納品請求3点日付版作成"
End Sub

VBAコードの各部分解説

保存フォルダを選択し階層それぞれのフォルダ名を取得

保存フォルダを選択

保存フォルダをダイアログを表示して指定できるようにします。

Shell関数を使用します。

こちらの記事が参考になります。

vbafoldereyecatch VBA 保存先フォルダをダイアログ指定で変数化

フォルダ名の取得

指定した保存フォルダのフルパスからそれぞれの階層のフォルダ名を取得します。

vbainsteeyecatch Instr関数・InstrRev関数は文字列を検索する。ファイルパス取得に威力 vbamideyecstch Mid関数・Right関数・Left関数は文字列中の文字を切り出す

ファイル保存を設定、準備する

ファイルを保存

新しいエクセルブックを追加してシートに「請求書」「納品書」「見積書」を順番にコピペしていきます。

VBACopyeyecatch シートのコピーを最速に理解!VBAコードで異なる結果

行高さ設定、列幅の設定、余白の設定、プリントタイトル、ページ番号

各設定を行います。

保存ファイルに名前を付ける

階層別に取り出したフォルダ名と年月日時分を組み合わせて名付けを行います。

vbamojisousaeyecatch ファイルの保存に年月日+時刻を付けて管理する VBAFormateyecatch Format関数は書式設定のテッパン関数!実務の書式と重要5例
        FN = Format(Now(), "yymmdd-hhmm")
        With Newbook
            If FPN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                            & FPN & "請求書_" & FN & ".xlsx"
            ElseIf FPMN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                            & FPN & "請求書_" & FN & ".xlsx"
            ElseIf FPLN = "作成伝票" Then
                .SaveAs Filename:=FolderPathD & "\" _
                        & FPMN & FPN & "請求書_" & FN & ".xlsx"
            Else
                .SaveAs Filename:=FolderPathD & "\" _
                & FPLN & FPMN & FPN & "請求書_" & FN & ".xlsx"
            End If
            NbkN = .Name
            .Close
        End With

帳票を保存するVBA まとめ

invoice3tenhozonp004

作成した帳票を保存するためのVBAを紹介しました。

操作的には、ユーザーフォームの「帳票保存」ボタンをクリックし保存フォルダを指定するだけで自動的に保存できるようにしました。

フォルダ変更やファイル名変更は、自動保存後に自由に行ってください。

次回は、販売管理ソフト「ソリマチ販売王」の外部データ出力からのデータ連携を行なえるVBAを紹介していきます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。