販売王のデータ出力を利用。見積納品請求3点帳票をVBA作成

3tendenhaneyecatch

官公庁に提出する3点セット伝票は、市販の売上管理ソフトでもうまく作れません。ただし販売王のデータ出力を上手く使えばエクセルVBAでチョチョイと作成できてしまいます。

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

今回は「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」についての追加的な記事になります。

日々の販売に使用している売上管理ソフト「販売王」のデータと連携する方法を紹介します。

毎日利用している売上管理ソフトに、入力した日々販売データは別に存在している。

取引先より特別に指定された様式で3点伝票を作成するのに、また同じ売上データを入力する。この帳票は売上管理ソフトでは作れない。

これは誰がどう考えても、時間効率が悪すぎると言わざるを得ないでしょう。

では、

既に売上管理ソフトに入力した日々データを出力して、この3点セット販売帳票を作成することはできないでしょうか。

悩める君
悩める君

これは問題解決しないと!

記事内容に進む前に、前回の記事を確認されるにはこちら↓になります。

3tendenusereyecatch 実用に耐えるユーザーフォーム作成のコツは具体的実例を教科書に

伝票の作成でデータのやり取りをするソリマチ販売王に関する記事はこちらです。

見積書納品書請求書作成の記事編成

売上管理ソフトでは作れない帳票

3tendenhanbaip006

商品販売に関する伝票発行に売上販売ソフトを利用するのは、皆さん普通に行っていることだと思います。

ソフトの入力手順で売上データを打ち込めば、自動的に帳票化してくれるという便利なソフトです。

当店では長年「販売王」を利用しています。

そんな便利なソフトでも、伝票作成で「使えないわ。コイツ」と思う時があります。

それはいわゆる「3点セット」と言われる帳票です。主に官公庁向けに提出する見積書・納品書・請求書のことです。

しかも、この見積書・納品書・請求書は、単に同一書式というだけでなく、

「税込金額で表示」とか「税別で最終合計で消費税加算」とか「セット品は1項目でとか、内容全て表示とか」

提出部署によっても、いろいろローカルルールさえもあります。

いつも使っている売上販売ソフトで、売上データを外部へ出力することは出来る。それは自分でもできる。

でも、出力されたそれは正に ” 売上データ表 ” データ羅列の表で、自分はそこから一歩も前へ進めない。

この記事で、「販売王」限定ですが、 ” 一歩前へ進む ” ことが出来るようになります。

3点帳票の作成に販売王のデータを利用

3tendenhanbaip007

手書きの伝票作成は長年来の方法で、ルーチン化していてビックリするくらい苦にならない人もいます。

端で見てる人が苦になるくらいです。

手作業で伝票を作る人は、いつもこんなことをしています。

納品には、作る伝票は既製伝票の「見積・納品・請求3枚つづり」。また、1ヶ月分を束ねて合計金額出して表紙付けて取引先に提出。記入はもちろんオール手書き。

納品書が1枚しかないので、納品する度に請求書も出しているShopもある。(誰が1ヶ月合計するの?)

  • 期間や年度契約の場合、月締めで作成することが多いので、1か月内に納品した商品全てを一覧化して帳票作成する。計算ミスをしないため何度か検算することは必須。
  • 受注が1案件単位の場合、帳票も1案件単位。分割納品が発生すれば、その時の分割納品のための(分割)納品書の添付が必要。
  • 各伝票に書く品名は(当たり前ですが)完全一致なので、特に手書きの場合は、転記ミスに最大級の注意が必要。
  • とにかく帳票作成に時間がかかる。作業手間がスゴイ。

ここから続けて記事を読み進めて時間の無駄にならない人は、

大前提として、手書きの販売伝票はやめている店。やめる意思がハッキリしている店。

その後の問題で、

伝票3点セット作成について、お手製の伝票を改善したいと考えている店。という方々が更に、この記事を読み進めてください。

そして「これから始めよう。」とか「管理ソフトを切り替えたい。」とか考えている人は、「販売王」(ソリマチ)をお勧めします。販売実績も20年以上、コスパも最高に良いソフトです。

ズバリ!解決策は、販売管理ソフトのデータベースをエクセルに流し込み、必要なデータ抽出作業行い、提出用の3点伝票を完成させる。

利用ツールとしては、エクセルと売上管理ソフトの「販売王」です。

当店では、これから話す方法を使っていて、この苦悩から全面的に解放されました。

販売王の出力データをエクセルVBAで3点帳票作成する

3tendenhanbaip008

簡潔に言えば、売上管理ソフトの販売王にある日々の販売データを、外部フォルダにエクスポートし、

利用するエクセルブックにデータとして入力できればいいということです。

もっと具体的には、「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」の「作業シート」に、「販売王」からエクスポートしたデータの必要な部分を移すことが出来れば良いということです。

方法は、以下のこれから説明していくVBAコードを、エクセルブックに付け加えていただければOKです。

完成すれば、以後のデータの再度の打ち直しはしなくてよくなるということです。

販売王の売り上げデータを出力する方法

最初に販売王のデータ出力を行います。

CSV形式で出力されますが、保存先フォルダを決めておきましょう。

今回はこのように配置します。保存先を「販売ソフト出力」フォルダとします。

見納請3点伝票 ⇒

⇒ 「販売ソフト出力」フォルダ

⇒ 見納請3点伝票作成.xlsm  

販売王の売上伝票のデータ出力の方法については、こちら↓が参考になります。

hanbaiou2eyecatchaa 販売王のデータ入出力形式をチェックして利用法を理解する。

出力した「生の売上データ」は、期間中の全顧客対象で、その1商品1顧客当たりのデータ列が55列(販売王19)になります。

月当たりで絞めれば何百行(何千行)にもなります。つまりこのままでは非常に扱い辛いデータになっています。

保存した出力データファイルを選択するVBAコード

販売王データ保存フォルダから、使用する売上データファイルを選択するためのVBAコードです。

見納請3点伝票作成.xlsm を開いて新たにモジュールを挿入します。

Module6に記述します。

コードの全体はこのようになります。

VBA
Option Explicit
Dim Canc As Long

Sub データを開く()
    Dim FD As FileDialog, f As Variant
        Set FD = Application.FileDialog(msoFileDialogOpen)
        With FD
            .ButtonName = "開く"
                With .Filters
                        .Clear
                        .Add "テキストファイル", "*.txt; *.csv", 1
                        .Add "Excelブック" _
                                    , "*.xls; *.xlsx; *.xlsm", 2
                End With
'表示するフォルダを指定します
            .InitialFileName = ThisWorkbook.Path & "\販売ソフト出力\"
                MsgBox "利用できるのは、" & vbCrLf & _
                    "csv形式またはエクセル形式のファイルになります。" _
                    , vbInformation, "見納請3点伝票作成"
            If .Show = True Then
                If Right(.SelectedItems(1), 3) = "txt" Then
                     MsgBox "txt形式では利用できません。", vbExclamation, _
                     "見納請3点伝票作成"
                     Exit Sub
                Else
                    .Execute
                End If
            Else
'[キャンセル]ボタンがクリックされた
                MsgBox "キャンセルが押されました", vbExclamation, _
                "見納請3点伝票作成"
                Canc = 1
                Exit Sub
            End If
        End With
End Sub

このプロシージャーが起動すると、

先ず、利用可能ファイルのメッセージが表示されます。

3tendenhanbai001n
矢印下001

次に、「販売ソフト出力」フォルダ内のファイル選択ダイアログが表示されます。

3tendenhanbai002n
矢印下001

.txt ファイルを選んだ場合は、このメッセージが表示されます。再度最初からやり直してください。

3tendenhanbai003n
矢印下001
3tendenhanbai005n

キャンセルボタンを押した場合は、メッセージが表示されて、このプロシージャーは終了します。

この時VBAコードとして、キャンセルされたという情報を入れ子の親のプロシージャーに送るために、

Cancという変数を設定して「1」という数字を代入します。

3tendenhanbai004n

.csvファイルを選択すると、エクセル形式でファイルが開かれます。

エクセルソフトの「作業シート」に売上データを転送するVBAコード

選択して開いた売上データのCSVファイルから、必要なデータを選び、「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」の「作業シート」に転記します。

VBAコード全体は、このようになります。

VBA
Sub データ転記()
'変数を宣言する
    Dim MNSBook As Workbook
    Dim SaSheet As Worksheet
    Dim CosNo, k, x, j As Long
    Dim csvRow, SaRow, GS As Long
    Dim Res(1 To 6) As Variant
    Dim CsvBook As Workbook
    Dim CsvSheet As Worksheet
        Set MNSBook = ThisWorkbook
        Set SaSheet = ThisWorkbook.Worksheets("作業シート")
'操作パネルのデータの表示形式を数値化して判断する
        CosNo = Val(StrConv((操作パネル.顧客番号.Value), _
                    vbNarrow))
        If CosNo = 0 Then
            MsgBox "顧客番号を入力してください。" _
                & vbCrLf & "全半角数字のみです。" & vbCrLf & _
                "文字と数字の複合番号は使えません。", _
                vbInformation, "見納請3点伝票作成"
            Exit Sub
        End If
    
        Call Module6.データを開く
        If Canc = 1 Then
            MsgBox "データファイル選択エラーです。" & vbCrLf & _
                        "最初からやり直してください。", vbInformation, _
                        "見納請3点伝票作成"
            Exit Sub
        End If
'選択したファイルが開かれてアクティブ状態になっている
        Set CsvBook = ActiveWorkbook
        Set CsvSheet = ActiveSheet
'「作業シート」の残っている以前のデータを消去
        SaSheet.Activate
        Range(Range("A2"), Range("A2") _
                .SpecialCells(xlCellTypeLastCell)).ClearContents
'販売王の選択データファイルの必要部分をデータ取り出し
        CsvBook.Activate
        With CsvSheet
            .Select
            csvRow = .Cells(Rows.Count, 1).End(xlUp).Row
            k = 0
            For x = 2 To csvRow
                If .Range("K" & x).Value = CosNo Then
                    Res(1) = k + 1
                    Res(2) = .Range("AK" & x).Value
                    Res(3) = .Range("AU" & x).Value
                    Res(4) = "冊"
                    Res(5) = .Range("AW" & x).Value
                    Res(6) = Res(3) * Res(5)
'取り出しデータを「作業シート」に転記
                    For j = 1 To 6
                        SaSheet.Cells(k + 2, j) = Res(j)
                    Next j
                    k = k + 1
                End If
            Next x
        End With
        CsvBook.Close False
'「作業シート」で合計金額を計算
        With SaSheet
            .Select
            SaRow = .Cells(Rows.Count, 1).End(xlUp).Row
            GS = WorksheetFunction.Sum(.Range(Cells(2, 6), _
                        .Cells(SaRow, 6)))
            .Cells(SaRow + 1, 6) = GS
        End With
End Sub

変数を宣言する

BookとSheetオブジェクトを変数化して代入します。

操作パネルのデータの表示形式を数値化して判断する

ユーザーフォーム「操作パネル」のテキストボックス顧客番号欄に入力された値を判断する。

入力された値をStrConvで全角を半角に変換します。

Valで文字列を数値に変換します。

顧客番号欄が無記入の場合は「0」と扱われます。

0以外の半角か全角の数値が入力されていないと、メッセージが表示され終了します。

VBAValeyecatch Val関数はデータ型不一致の解決策。文字列型から数値型へ

部品化プロシージャーを呼び出す

先ほどの「データを開く」プロシージャーを呼び出します。

注意ポイントとして、

「販売ソフト出力」フォルダ内のファイル選択ダイアログで「キャンセルボタン」が押されたとき、

このプロシージャーは、データファイルを開くことなく終了します。

そして、

入れ子の親プロシージャー「データ転記」に戻りますが、ここで、「開いたであろうファイル」を待ち受けていますので、

「ファイルが無い」ことでエラーストップになってしまいます。これを回避するために、

「Canc」という変数を設定しています。

この変数には、ファイル選択ダイアログで「キャンセルボタン」が押されたときに「1」が代入されます。

「データを開く」から引き継いで、「Canc=1」の時に親の「データ転記」プロシージャーが実行中止されるようにしています。

その時にメッセージで ” データファイル選択エラーです。最初からやり直してください。” と表示されるようにしています。

選択したファイルが開かれてアクティブ状態になっている

選択されて開いた販売王の売上データがアクティブになっています。

この時、そのアクティブになったBOOKとシートに名前を付けます。(CSVファイルをエクセル形式で開くとブックと同名のシートが1枚だけ存在しています。)

CsvBookとCsvSheetと名付けた後は、このVBAを実行しているBOOKからフォーカスが外れても、

このBOOK名やシート名で呼び出すことが出来るようになります。

以前の残りデータを消去する

先回に使った売上データが「作業シート」に残っていますので、まずそれを消去します。

SpecialCellseyecatch SpecialCellsメソッドはセル検索し選択する vbalastcelleyecatch データ入力済セルの最終行番号を取得する

データを転記する

For~Nextを使って、売上データ.csvからデータを拾ってきて、作業シートへ順番に転記していきます。

販売王から出力した販売データは、指定期間内の全顧客の全売上データになりますので、

先ず、必要な特定の顧客データだけ拾ってくる必要があります。(変数x)

該当のデータ55項目の中から必要なデータ6項目をピックアップします(変数j)

それを順番に「作業シート」に移していくということです。

fornextirekoeyecatch For~Nextのループと入れ子構造をVBA最速理解 vbahairetueyecatch 1次元配列とは。静的配列と動的配列 エクセルVBA

合計計算をする

転記したデータ、その商品の合計の最後の合計欄にトータル合計を計算し表示します。

vbasumeyecatch SUM関数で合計計算!実務で使えるVBAコード作成

プロシージャーをボタンで操作する

完成したプロシージャーを、ユーザーフォーム「操作パネル」に配置しているボタンとリンクさせます。

記事をご覧いただいている読者の皆さんの中には、「販売王」を利用していない方もおられます。

「操作パネル」に配置している「データ連携」というボタンですが、

「販売王」を利用するかしないかで、この機能のONとOFFが出来るようになっています。

チェックボックスの「ソリマチ販売王連携」をチェックしたかしてないかで判断します。

VBAコードを記述するのは、この記事↓で紹介している部分になります。

3tendenusereyecatch 実用に耐えるユーザーフォーム作成のコツは具体的実例を教科書に

ユーザーフォームモジュールの以下のコードです。

VBA
Private Sub データ連携する_Click()
        If CheckBox1 = False Then Exit Sub
        Call Module6.データ転記
End Sub

この2行のVBAコードでボタンとの接続完了です。

見積書、納品書、請求書3点帳票作成のまとめ

3tendenhanbaip009

これで、帳票を作りたい取引先の必要な売上データが、「作業シート」に移りました。

後は、「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」の通常操作で、

「3点セット」帳票が完成です。

この様に、「販売王」を使えばパソコン操作でもデータ入力作業をすることなく、

マウスクリックだけで「3点セット」を作成することが出来ます。

恐らく業務改善の時短効果は、「何時間」から「分単位」になると思います。

じゅんぱ店長
じゅんぱ店長

ウソっぽく聞こえますが、ホントです。

今も店長は実践しています。

ねこ氏
ねこ氏

ビックリするよ

これで、オプション設定も含めて「販売帳票(見積書、納品書、請求書)を作成するエクセルソフト」は完成いたしました。

次回は、全体を通してこのソフトの取扱説明を行いたいと思います。

次の記事に進むのはこちら↓からです。

3tentorisetueyecatch 見積書納品書請求書作成ソフトの無料ダウンロードと取説

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

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

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

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

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

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min