売上伝票データを外部入力。販売王用CSVファイルを作る

hanbaiurieyecatchaa

先の商品登録に追加して販売王の売上伝票も作成できるようにします。
エクセルシートをCSVデータ化して販売王にインポートします。
これで外部作成の売上データを販売王で伝票出力できます。

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

先回作成したエクセルブック「販売データ入力.xlsm」で、販売王への商品登録を外部データから行えるようになりました。

今回は、販売伝票(売上伝票)を外部作成データのインポートによって素早く作成できるようにします。

この外部データのインポートによって、作業手間MAXの伝票作成を手早く行えるようになります。

信じられないような超速時短を伝票作成業務で行えます。例えば、

「当日着荷した○○図書館注文分の30冊の単行本を、午前中リミット納品の条件でも、伝票と請求書を作成してしっかり納品する!!」

ことも出来るようになると思います。

売上伝票を手早く作成する入力用CSV

hanbaicusuri018kai

外部データのCSVテキストデータを販売王にインポートして、販売伝票(売上伝票)を簡単に作成できるようにします。

先回作成したエクセルBOOK「販売データ入力.xlsm」にこの機能を追加します。

この機能を追加することで、エクセルBOOK「販売データ入力.xlsm」を使って、
販売王の商品登録と販売伝票(売上伝票)作成を効率よく時短で行えるようになります。

入力用CSV作成のためのVBAコード組み立て手順

先回作成したエクセルBOOK「販売データ入力.xlsm」に新しくSheetと標準モジュールを追加挿入します。

作業手順は、

となります。

①(事前準備)フォルダを作成し顧客情報を保存

以前に作成した「販売王入力」フォルダの中に新しく「顧客登録」フォルダを作成します。

hanbaicusuri005kai

その作成したフォルダの中に販売王の得意先登録データをテキストデータ出力して保存します。

ファイル名は「顧客登録.CSV」とします。

このCSVデータは、販売王への売上伝票の入力データ作成の時に、

得意先登録番号と得意先名のマッチング作業で利用するためのものになります。

販売王からの登録された得意先データの出力方法は、先回の商品登録の場合と同じような方法で行います。

販売王のツールタブ → 「テキストデータ出力」で表示される窓の「出力形式名称」のプルダウンメニューで「得意先台帳」を選択します。

出力ファイル名を「顧客登録」で保存先を「顧客登録」フォルダにしてください。

hanbaicusuri001a

販売王で新たに得意先の登録を行った時は、その都度このように「テキストデータ出力」でCSVデータを更新してください。

②(事前準備)得意先別の納品価格(値引率)登録

「販売データ入力.xlsm」の「操作ボタン」シートに記入登録するテンプレを作成します。

ここでは、単に情報入力のみの表の作成となります。

今回は「特別価格対応表」というタイトルにしました。

hanbaicusuri003na

表の作成位置はI列6行目の書き出しで表の形はこのようにしてください。

(VBAコード上で、セル位置を指定しますので「I列6行目」からの書き出しは決め事になります。)

販売王入力用CSVデータ作成のVBAコード

0hanbaicusuri019kai

はじめに「販売データ入力.xlsm」に新しいSheetを追加しておきます。

シート名を「売上CSV作成」としてください。

Module5にプロシージャー「 売上CSV作成」として記述する

マクロ名を「売上CSV作成」としてVBAコードを組み立てていきます。

今回作成する全VBAコード

VBAプログラム本体

VBA
Sub 売上CSV作成()

    Dim myYear, myMonth, myDay As Integer
    Dim TKD, INR As Range
    Dim myCustom, SYO, myMsgac As String
    Dim myNOme, myNOmf, myNOMd As Long
    Dim TAX, NBK As Variant
    Dim Ans1, Ans2, s, n, t, pat As Long
    Dim SRow, LRowa As Long
    Dim Tcode, TB, TBP, TBPa As Long
'(あ)メッセージ設定
    Const myMsga As String = "売上伝票番号は何番ですか?"
    Const myMsgaa As String = "販売先コードは何番ですか?"
    Const myMsgab As String = "税金は何パーセントですか?8 or 10 " & _
        "or 非課税は1"
    Const myMsgad As String = "特別価格対応の売上伝票ですか?"
    Const myTitle As String = "売上登録"
    Const myMsgb As String = "その販売先コードの顧客が見つかりません。"
    Const myMsgba As String = "作業を中止、終了します。"
    Const myMsgc As String = "特別価格対応表に得意先がありません" _
        & vbCrLf & "「得意先コード」と「値引率」を登録してください。"
    Const myMsgca As String = "売上CSV作成を終了しますか。「はい」" _
           & vbCrLf & "価格対応なしにしますか?「いいえ」" & vbCrLf _
           & "どちらかを選択してください"
           
    ChDir ThisWorkbook.Path & "\顧客登録"
      
        Workbooks("販売データ入力.xlsm").Activate
        Worksheets("売上CSV作成").Select
        Cells.Clear
        With Worksheets("操作ボタン")
            .Activate
'(い)売上伝票番号設定の入力
            myNOmf = Application.InputBox(prompt:=myMsga, _
                Title:=myTitle, Type:=1)
            If myNOmf = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
            End If
'(う)販売先コード設定の入力。(か)へ
            myNOme = Application.InputBox(prompt:=myMsgaa, _
                Title:=myTitle, Type:=1)
            If myNOme = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
            End If
'(え)消費税設定の入力
            TAX = Application.InputBox(prompt:=myMsgab, _
                Title:=myTitle, Type:=1) * 1 / 100
            If TAX = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
                End If
            End With
'(お)特別価格対応伝票の確認
        Ans1 = MsgBox(myMsgad, vbYesNo + vbExclamation, "確認")
'(か)顧客登録CSVを開く
    '販売先コードから顧客名を取得
        Workbooks.Open Filename:="顧客登録.csv"
        Set TKD = Workbooks("顧客登録.csv") _
                            .Worksheets("顧客登録").Range("A:A")
        On Error Resume Next
        s = Application.WorksheetFunction.Match(myNOme, TKD, 0)
        mycostom = Range("I" & s).Value
        On Error GoTo 0
        If mycostom = "" Then
           MsgBox myMsgb & vbCrLf & myMsgba, vbExclamation, myTitle
           Workbooks("顧客登録.csv").Close False
           Workbooks("販売データ入力.xlsm") _
                            .Worksheets("操作ボタン").Activate
           Range("A1").Select
           Exit Sub
        End If
        Workbooks("顧客登録.csv").Close False
'(き)売上CSV作成シートに項目ラベルを付ける
        Workbooks("販売データ入力.xlsm").Activate
        Call Module5.売上登録csv項目ラベル
'(く)作業シートのデータの利用
        Worksheets("作業シート").Select
        LRowa = Range("B1").CurrentRegion.Rows.Count - 1
        myYear = Year(Date)
        myMonth = Month(Date)
        myDay = Day(Date)
'(け)売上CSV作成シートに必要データを入力、(し)まで
        For n = 1 To LRowa
            SYO = Worksheets("作業シート").Cells(n + 1, 2).Value
            With Worksheets("売上CSV作成")
    '売上伝票番号
                .Cells(n + 1, 1).Value = myNOmf
    '売上伝票発行日
                .Cells(n + 1, 2).Value = myYear & "/" & myMonth _
                                & "/" & myDay
    '売上伝票区分(通常売上)
                .Cells(n + 1, 3).Value = 2
                .Cells(n + 1, 6).Value = 0
                .Cells(n + 1, 7).Value = 0
                .Cells(n + 1, 8).Value = 1
    '得意先コード
                .Cells(n + 1, 11).Value = myNOme
    '得意先名
                .Cells(n + 1, 12).Value = mycostom
                If TAX = 8 * 1 / 100 Then
                    Tcode = 3
                ElseIf TAX = 1 * 1 / 100 Then
                    Tcode = ""
                Else
                    Tcode = 4
                End If
    '消費税設定
                .Cells(n + 1, 13).Value = Tcode
  '担当者設定コード
                .Cells(n + 1, 16).Value = 101
    '売上請求先コード
                .Cells(n + 1, 17).Value = myNOme
    '売上請求先名
                .Cells(n + 1, 18).Value = mycostom
                .Cells(n + 1, 19).Value = 0
    '請求締め日月末
                .Cells(n + 1, 20).Value = DateSerial(Year(Now), _
                                    Month(Now) + 1, 1) - 1
    '商品発送予定日(本日設定)
                .Cells(n + 1, 25).Value = myYear & "/" & myMonth _
                                    & "/" & myDay
    '商品発送済チェックマーク
                .Cells(n + 1, 26).Value = 1
                .Cells(n + 1, 30).Value = "お買い上げありがとうございます"
                .Cells(n + 1, 32).Value = n
                .Cells(n + 1, 33).Value = 1
    '商品台帳商品コード
                .Cells(n + 1, 36).Value = Worksheets("商品CSV作成") _
                                    .Cells(n + 1, 1)
    '販売王は商品名は20文字まで入力可
                .Cells(n + 1, 37).Value = Left(SYO, 20)
                myMsgac = "「" & SYO & "」 の売上冊数は"
                On Error Resume Next
                myNOMd = Application.InputBox(prompt:=myMsgac, _
                                    Title:=myTitle, Type:=1)
                On Error GoTo 0
                If myNOMd = 0 Then
                    MsgBox myMsgbb, vbExclamation, myTitle
                End If
    '販売数量
                .Cells(n + 1, 47).Value = myNOMd
                If TAX = 1 * 1 / 100 Then
    '売上伝票.課税区分(非課税)
                    .Cells(n + 1, 51).Value = 3
                Else
    '課税区分(課税)
                    .Cells(n + 1, 51).Value = 2
                End If
    '簡易課税事業区分
                .Cells(n + 1, 52).Value = 9
            End With
'(こ)商品価格計算のコード
    'ユーザー選択(お)で「いいえ」を選択
            If Ans1 = vbNo Then
                pat = 1
                GoTo step1
            End If
    '特別価格対応を調べる
            With Worksheets("操作ボタン")
                SRow = .Cells(Rows.Count, 9).End(xlUp).Row
                Set INR = .Range("I1", "I" & SRow)
                On Error Resume Next
                t = Application.WorksheetFunction.Match(myNOme, INR, 0)
                On Error GoTo 0
    '特別価格対応の登録がない場合。ユーザーが次の操作を選択
                If t = 0 Then
                MsgBox myMsgc, vbExclamation, myTitle
                Ans2 = MsgBox(myMsgca, vbYesNo + vbExclamation, myTitle)
                    If Ans2 = 6 Then
                        Module6.売上CSV作成クリア
                        Exit Sub
                    Else
                        pat = 1
                        GoTo step1
                    End If
                End If
    '特別価格対応の税別価格と税込価格を計算
                NBK = .Range("K" & t).Value * 1 / 100
                TB = WorksheetFunction.Round(Worksheets("作業シート") _
                                    .Cells(n + 1, 5) * (1 - NBK), 0)
                TBP = WorksheetFunction.Round(TB * (1 + TAX), 0)
            End With
            Worksheets("売上CSV作成").Cells(n + 1, 49).Value = TBP
'(さ)特別価格対応しない伝票や対応登録のない顧客の場合
step1:
            If pat = 1 Then
                With Worksheets("売上CSV作成")
                    If TAX = 1 * 1 / 100 Then TAX = 0
                    TBPa = WorksheetFunction.Round( _
                    Worksheets("作業シート").Cells(n + 1, 5) * _
                                                        (1 + TAX), 0)
                    .Cells(n + 1, 49).Value = TBPa
                    .Cells(n + 1, 54).Value = .Cells(n + 1, 47) * _
                                    .Cells(n + 1, 49)
                End With
            End If
'(し)売上CSV作成データの入力ここまで
        Next n

'(す)csv形式で別ホルダーにデータシート出力
    Dim Shell As Object
    Dim FolderPath As String
    Dim TIM, FN As String
    
    'Shell関数でフォルダダイアログ
        Set Shell = CreateObject("Shell.Application") _
            .BrowseForFolder(0, "フォルダを選択してください", 0, _
                            ThisWorkbook.Path & "\販売王売上登録CSV")
        If Shell Is Nothing Then
            FolderPath = ""
            MsgBox myMsgba, vbExclamation, myTitle
            Exit Sub
        Else
            FolderPath = Shell.Items.Item.Path
        End If
    'CSV用に新規ブック作成
        Workbooks.Add
        ActiveSheet.Select
    '販売先コードと作成年月日時刻を付加して名付けcsv保存
        Union(Columns(2), Columns(20)).NumberFormatLocal = "@"
        TIM = Format(Now(), "yymmdd-hhmm")
        FN = "売上登録_" & myNOme & "-" & TIM
         ActiveWorkbook.SaveAs Filename:=FolderPath & "\" & FN & ".csv", _
            FileFormat:=xlCSV, CreateBackup:=False
    '名付け保存したcsvにデータ貼り付け
        Workbooks("販売データ入力.xlsm").Activate
        Worksheets("売上CSV作成").Select
        Cells.Copy
        Range("A1").Select
        Workbooks(FN & ".csv").Activate
        Worksheets(FN).Select
        Cells.PasteSpecial Paste:=xlPasteValues
        Union(Columns(2), Columns(20), Columns(25)).NumberFormatLocal = _
                                                            "yyyy/m/d"
        Range("A1").Select
    '作業終了でフォーカスを初期位置セルに戻す
        Workbooks("販売データ入力.xlsm").Activate
        Worksheets("操作ボタン").Select
        Range("A1").Select
    'csvファイルの手動終了メッセージ
        Workbooks(FN & ".csv").Activate
        MsgBox "このCSVは手動で終了させてください。"

End Sub

部品化プロシージャー

VBA
Sub 売上登録csv項目ラベル()
        With Worksheets("売上CSV作成")
            .Cells(1, 1).Value = "売上伝票.売上伝票番号"
            .Cells(1, 2).Value = "売上伝票.売上伝票日付"
            .Cells(1, 3).Value = "売上伝票.売上伝票区分"
            .Cells(1, 4).Value = "売上伝票.統一伝票区分"
            .Cells(1, 5).Value = "売上伝票.統一伝票分類コード"
            .Cells(1, 6).Value = "売上伝票.直送指定"
            .Cells(1, 7).Value = "売上伝票.委託区分"
            .Cells(1, 8).Value = "売上伝票.赤伝票指定"
            .Cells(1, 9).Value = "売上伝票.赤伝対応伝票番号"
            .Cells(1, 10).Value = "売上伝票.見積番号"
            .Cells(1, 11).Value = "売上伝票.得意先コード"
            .Cells(1, 12).Value = "売上伝票.得意先名"
            .Cells(1, 13).Value = "売上伝票.税率区分コード(明細)"
            .Cells(1, 14).Value = "売上伝票.発送先コード"
            .Cells(1, 15).Value = "売上伝票.発送先名"
            .Cells(1, 16).Value = "売上伝票.自社担当者コード"
            .Cells(1, 17).Value = "売上伝票.請求得意先コード"
            .Cells(1, 18).Value = "売上伝票.請求得意先名"
            .Cells(1, 19).Value = "売上伝票.随時請求区分"
            .Cells(1, 20).Value = "売上伝票.請求予定日"
            .Cells(1, 21).Value = "売上伝票.請求書発行日"
            .Cells(1, 22).Value = "売上伝票.請求書発行済み"
            .Cells(1, 23).Value = "売上伝票.請求先送月数"
            .Cells(1, 24).Value = "売上伝票.回収日締切"
            .Cells(1, 25).Value = "売上伝票.発送予定日"
            .Cells(1, 26).Value = "売上伝票.発送済"
            .Cells(1, 27).Value = "売上伝票.納品書発行済み"
            .Cells(1, 28).Value = "売上伝票.付箋1"
            .Cells(1, 29).Value = "売上伝票.付箋2"
            .Cells(1, 30).Value = "売上伝票.摘要"
            .Cells(1, 31).Value = "売上伝票.広告企画区分"
            .Cells(1, 32).Value = "売上伝票.売上明細番号"
            .Cells(1, 33).Value = "売上伝票.売上明細区分"
            .Cells(1, 34).Value = "売上伝票.倉庫コード"
            .Cells(1, 35).Value = "売上伝票.発送済"
            .Cells(1, 36).Value = "売上伝票.商品コード"
            .Cells(1, 37).Value = "売上伝票.商品名"
            .Cells(1, 38).Value = "売上伝票.規格・型番"
            .Cells(1, 39).Value = "売上伝票.カラー"
            .Cells(1, 40).Value = "売上伝票.サイズ"
            .Cells(1, 41).Value = "売上伝票.計算式コード"
            .Cells(1, 42).Value = "売上伝票.計算値1"
            .Cells(1, 43).Value = "売上伝票.計算値2"
            .Cells(1, 44).Value = "売上伝票.計算値3"
            .Cells(1, 45).Value = "売上伝票.販売入数"
            .Cells(1, 46).Value = "売上伝票.箱数"
            .Cells(1, 47).Value = "売上伝票.数量"
            .Cells(1, 48).Value = "売上伝票.数量単位"
            .Cells(1, 49).Value = "売上伝票.単価"
            .Cells(1, 50).Value = "売上伝票.原単価"
            .Cells(1, 51).Value = "売上伝票.課税区分"
            .Cells(1, 52).Value = "売上伝票.簡易課税事業区分"
            .Cells(1, 53).Value = "売上伝票.備考"
            .Cells(1, 54).Value = "売上伝票.金額"
            .Cells(1, 55).Value = "売上伝票.粗利益"
        End With
End Sub

マクロ実行コマンドボタンに連結するコード(Module4に設置)

VBA
Sub 売上登録CSV()

        Call Module5.売上CSV作成
End Sub
ここで使うVBAコードの参考記事

③インプットボックスを使い必要情報を入手する

インプットボックスのVBAの前に変数と定数宣言のコード記述がありますが、そこは見た通りですので割愛します。

ユーザーからのデータ入力で利用の都度変わる、一番重要な部分を「InputBox」で入力するようにします。

ここで「キャンセルボタン」が押されたらその場でプロシージャーを離脱します。

「特別価格対応」を行う売上伝票を作成するかどうかの解答(Ans1)は、VBAコードの後半で使用します。

VBA
'(い)売上伝票番号設定の入力
            myNOmf = Application.InputBox(prompt:=myMsga, _
                Title:=myTitle, Type:=1)
            If myNOmf = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
            End If
'(う)販売先コード設定の入力。(か)へ
            myNOme = Application.InputBox(prompt:=myMsgaa, _
                Title:=myTitle, Type:=1)
            If myNOme = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
            End If
'(え)消費税設定の入力
            TAX = Application.InputBox(prompt:=myMsgab, _
                Title:=myTitle, Type:=1) * 1 / 100
            If TAX = 0 Then
                MsgBox myMsgba, vbExclamation, myTitle
                .Range("A1").Select
                Exit Sub
                End If
            End With
'(お)特別価格対応伝票の確認
        Ans1 = MsgBox(myMsgad, vbYesNo + vbExclamation, myTitle)
hanbaicusuri008kai
矢印下001
hanbaicusuri009kai
矢印下001
hanbaicusuri0010kai
矢印下001
hanbaicusuri0011kai
ここで使うVBAコードの参考記事

④売上伝票で必要なデータを付け加えデータリストを整える。

hanbaicusuri020kai

売上CSVの入力データの設定の部分になります。

多くの項目がありますが、必要項目のみ設定していきます。

商品価格の計算について価格を設定するためのパラメーターがいくつかあります。

(か)発行する販売先名(顧客名)を取得する

インプットボックスで入力された販売先コードより「販売先名(顧客名)」を取得します。

取得方法は、販売王よりエクスポート入手している「顧客登録.csv」ファイルよりマッチするデータを探ります。

顧客データがない(マッチしない)場合は、販売王へ売上データをインポートできませんので、顧客情報追加して「顧客登録.csv」ファイルを最新にする必要があります。情報不備で、このプロシージャーは終了します。

VBA
'(か)顧客登録CSVを開く
    '販売先コードから顧客名を取得
        Workbooks.Open Filename:="顧客登録.csv"
        Set TKD = Workbooks("顧客登録.csv") _
                            .Worksheets("顧客登録").Range("A:A")
        On Error Resume Next
        s = Application.WorksheetFunction.Match(myNOme, TKD, 0)
        mycostom = Range("I" & s).Value
        On Error GoTo 0
        If mycostom = "" Then
           MsgBox myMsgb & vbCrLf & myMsgba, vbExclamation, myTitle
           Workbooks("顧客登録.csv").Close False
           Workbooks("販売データ入力.xlsm") _
                            .Worksheets("操作ボタン").Activate
           Range("A1").Select
           Exit Sub
        End If
        Workbooks("顧客登録.csv").Close False
hanbaicusuri0012kai

(き)売上CSV作成シートに項目ラベルを付ける

売上CSVシートの先頭行に項目ラベルを設置します。

別プロシージャーで、部品化しています。

VBA
'(き)売上CSV作成シートに項目ラベルを付ける
        Workbooks("販売データ入力.xlsm").Activate
        Call Module5.売上登録csv項目ラベル
ここで使うVBAコードの参考記事

(く・け)作業シートのデータと個別設定のデータを売上CSV作成シートに記述する

作業シートの書籍データと(頻繁に変更しない)個別のデータ設定を行います。

販売王の各設定項目は整数数値化されていますので、販売王の利用状況によってその数値を変更する必要があるかもしれません。

例えば、消費税税込みは「2」、消費税非課税は「3」とか、です。

それぞれ、販売王を使用している状態に合わせた各設定項目の数値は、実際に入力した売上伝票データを「エクスポート」してcsvファイル化してください。

そのcsvファイルにある各設定項目の数値を、このVBAコードにはめ替えるようにしてください。

(少なくとも販売担当者コードは、営業担当ごとに変わりますので、必ず設定確認した方が良いです。)

VBA
'(く)作業シートのデータの利用
        Worksheets("作業シート").Select
        LRowa = Range("B1").CurrentRegion.Rows.Count - 1
        myYear = Year(Date)
        myMonth = Month(Date)
        myDay = Day(Date)
'(け)売上CSV作成シートに必要データを入力、(し)まで
        For n = 1 To LRowa
            SYO = Worksheets("作業シート").Cells(n + 1, 2).Value
            With Worksheets("売上CSV作成")
    '売上伝票番号
                .Cells(n + 1, 1).Value = myNOmf
    '売上伝票発行日
                .Cells(n + 1, 2).Value = myYear & "/" & myMonth _
                                & "/" & myDay
    '売上伝票区分(通常売上)
                .Cells(n + 1, 3).Value = 2
                .Cells(n + 1, 6).Value = 0
                .Cells(n + 1, 7).Value = 0
                .Cells(n + 1, 8).Value = 1
    '得意先コード
                .Cells(n + 1, 11).Value = myNOme
    '得意先名
                .Cells(n + 1, 12).Value = mycostom
                If TAX = 8 * 1 / 100 Then
                    Tcode = 3
                ElseIf TAX = 1 * 1 / 100 Then
                    Tcode = ""
                Else
                    Tcode = 4
                End If
    '消費税設定
                .Cells(n + 1, 13).Value = Tcode
  '担当者設定コード
                .Cells(n + 1, 16).Value = 101
    '売上請求先コード
                .Cells(n + 1, 17).Value = myNOme
    '売上請求先名
                .Cells(n + 1, 18).Value = mycostom
                .Cells(n + 1, 19).Value = 0
    '請求締め日月末
                .Cells(n + 1, 20).Value = DateSerial(Year(Now), _
                                    Month(Now) + 1, 1) - 1
    '商品発送予定日(本日設定)
                .Cells(n + 1, 25).Value = myYear & "/" & myMonth _
                                    & "/" & myDay
    '商品発送済チェックマーク
                .Cells(n + 1, 26).Value = 1
                .Cells(n + 1, 30).Value = "お買い上げありがとうございます"
                .Cells(n + 1, 32).Value = n
                .Cells(n + 1, 33).Value = 1
    '商品台帳商品コード
                .Cells(n + 1, 36).Value = Worksheets("商品CSV作成") _
                                    .Cells(n + 1, 1)
    '販売王は商品名は20文字まで入力可
                .Cells(n + 1, 37).Value = Left(SYO, 20)
                myMsgac = "「" & SYO & "」 の売上冊数は"
                On Error Resume Next
                myNOMd = Application.InputBox(prompt:=myMsgac, _
                                    Title:=myTitle, Type:=1)
                On Error GoTo 0
                If myNOMd = 0 Then
                    MsgBox myMsgbb, vbExclamation, myTitle
                End If
    '販売数量
                .Cells(n + 1, 47).Value = myNOMd
                If TAX = 1 * 1 / 100 Then
    '売上伝票.課税区分(非課税)
                    .Cells(n + 1, 51).Value = 3
                Else
    '課税区分(税込)
                    .Cells(n + 1, 51).Value = 2
                End If
    '簡易課税事業区分
                .Cells(n + 1, 52).Value = 9
            End With
hanbaicusuri0013kai

(こ)商品価格計算のコード

商品価格の計算をここで行います。

  •  商品の特別価格対応かどうか
  •  消費税は何%か
  •  消費税は課か課非課税か

などの条件別に計算する必要があります。

VBA
'(こ)商品価格計算のコード
    'ユーザー選択(お)で「いいえ」を選択
            If Ans1 = vbNo Then
                pat = 1
                GoTo step1
            End If
    '特別価格対応を調べる
            With Worksheets("操作ボタン")
                SRow = .Cells(Rows.Count, 9).End(xlUp).Row
                Set INR = .Range("I1", "I" & SRow)
                On Error Resume Next
                t = Application.WorksheetFunction.Match(myNOme, INR, 0)
                On Error GoTo 0
    '特別価格対応の登録がない場合。ユーザーが次の操作を選択
                If t = 0 Then
                MsgBox myMsgc, vbExclamation, myTitle
                Ans2 = MsgBox(myMsgca, vbYesNo + vbExclamation, myTitle)
                    If Ans2 = 6 Then
                        Call Module6.売上CSV作成クリア
                        Exit Sub
                    Else
                        pat = 1
                        GoTo step1
                    End If
                End If
    '特別価格対応の税別価格と税込価格を計算
                NBK = .Range("K" & t).Value * 1 / 100
                TB = WorksheetFunction.Round(Worksheets("作業シート") _
                                    .Cells(n + 1, 5) * (1 - NBK), 0)
                TBP = WorksheetFunction.Round(TB * (1 + TAX), 0)
            End With
            Worksheets("売上CSV作成").Cells(n + 1, 49).Value = TBP
'(さ)特別価格対応しない伝票や対応登録のない顧客の場合
step1:
            If pat = 1 Then
                With Worksheets("売上CSV作成")
                    If TAX = 1 * 1 / 100 Then TAX = 0
                    TBPa = WorksheetFunction.Round( _
                    Worksheets("作業シート").Cells(n + 1, 5) * _
                                                        (1 + TAX), 0)
                    .Cells(n + 1, 49).Value = TBPa
                    .Cells(n + 1, 54).Value = .Cells(n + 1, 47) * _
                                    .Cells(n + 1, 49)
                End With
            End If
'(し)売上CSV作成データの入力ここまで
        Next n
hanbaicusuri0014kai
矢印下001
hanbaicusuri0015kai
ここで使うVBAコードの参考記事

⑤売上CSV作成シートをCSVファイル化しフォルダ保存する

完成した「売上CSV作成」シートは、別ファイルとして独立させ、指定するフォルダに保存します。

ファイル形式は「.csv」に設定しますが、保存名を後から見返した時分かりやすい名前にしておきます。

自動的にファイル名が「売上登録_(得意先コード)-年月日-登録時間.csv」で保存されます。

保存先は、「販売王売上登録CSV」フォルダに保存します。

この「販売王売上登録CSV」フォルダ内にそれぞれの「顧客名フォルダ」を作成することが出来ます。

登録時間をファイル名に入れていますので、時間差(分差)で同じデータを別名ファイルに保存することができます。

外部に書き出したCSVファイルは、作成完了確認も含めて、敢えて手動で保存終了する様にしています。

VBA
'(す)csv形式で別ホルダーにデータシート出力
    Dim Shell As Object
    Dim FolderPath As String
    Dim TIM, FN As String
    
    'Shell関数でフォルダダイアログ
        Set Shell = CreateObject("Shell.Application") _
            .BrowseForFolder(0, "フォルダを選択してください", 0, _
                            ThisWorkbook.Path & "\販売王売上登録CSV")
        If Shell Is Nothing Then
            FolderPath = ""
            MsgBox myMsgba, vbExclamation, myTitle
            Exit Sub
        Else
            FolderPath = Shell.Items.Item.Path
        End If
    'CSV用に新規ブック作成
        Workbooks.Add
        ActiveSheet.Select
    '販売先コードと作成年月日時刻を付加して名付けcsv保存
        Union(Columns(2), Columns(20)).NumberFormatLocal = "@"
        TIM = Format(Now(), "yymmdd-hhmm")
        FN = "売上登録_" & myNOme & "-" & TIM
         ActiveWorkbook.SaveAs Filename:=FolderPath & "\" & FN & ".csv", _
            FileFormat:=xlCSV, CreateBackup:=False
    '名付け保存したcsvにデータ貼り付け
        Workbooks("販売データ入力.xlsm").Activate
        Worksheets("売上CSV作成").Select
        Cells.Copy
        Range("A1").Select
        Workbooks(FN & ".csv").Activate
        Worksheets(FN).Select
        Cells.PasteSpecial Paste:=xlPasteValues
        Union(Columns(2), Columns(20), Columns(25)).NumberFormatLocal = _
                                                            "yyyy/m/d"
        Range("A1").Select
    '作業終了でフォーカスを初期位置セルに戻す
        Workbooks("販売データ入力.xlsm").Activate
        Worksheets("操作ボタン").Select
        Range("A1").Select
    'csvファイルの手動終了メッセージ
        Workbooks(FN & ".csv").Activate
        MsgBox "このCSVは手動で終了させてください。"

End Sub
hanbaicusuri0016kai
矢印下001
hanbaicusuri0017kai

⑥作成したマクロの実行ボタン設置と連結させるVBAコード

Module5で記述している、この売上CSV作成プロシージャーを実行するためのコマンドボタンを、「操作ボタン」シートに設置します。

そしてこのプロシージャーを起動するVBAコードをModule4に設置します。

ここで使うVBAコードの参考記事

コマンドボタンの設置

hanbaicusuri007kai

Module4のVBAコード記述

モジュール4には前回作成した商品登録のマクロのコマンドボタン連結コードがすでにあります。追加する形で「売上登録CSV」を設置してください。

VBA
Sub 商品登録CSV()

        Call Module2.商品登録csv作成マクロ
        Call Module3.データCSV化
End Sub
VBA
Sub 売上登録CSV()

        Call Module5.売上CSV作成
End Sub

外部データから作る入力用CSVファイルのまとめ

hanbaicusuri021kai

この記事のVBAコードを実行することで、

販売王の外部テキストデータ入力機能を使って、商品登録から、売上伝票作成までの一貫した作業ができるようになりました。

悩める君

何かちょっと 見えてきたかな。

このエクセルVBAソフトを使って外部データをCSVテキストデータ化して販売王にインポートするという方法で、

今まで、販売王で一番ネックだった登録作業という時間のかかりすぎる業務が大幅に改善されると思います。

ちょっと期待してもいいかもです。

販売管理ソフトの「販売王」の利用ワザで、こんな効率アップ策があることにき気づいていましたか?

じゅんぱ店長

大変長文になりました。

このソフトの一貫した使い方の説明は、改めて記事にアップいたします。

その記事で、作成完成済のソフトもダウンロードできるようにする予定です。

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

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

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)

学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。

エクセルVBAを使って業務効率を上げて行くのに、始めのうちに知っておきたい内容を纏めています。

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

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

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

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

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

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min