ブック間のデータ移動と編集 注文書からテンプレートへ

faxhatyudatabkeyecatch

エクセルVBAでブック間でのデータの移動編集を行うコードを作ります。
データの送り出し側と受け入れ側の作業内容と役割をしっかり決めておきましょう。

じゅんぱ店長(@junpa33)です。

作成した書籍発注データを、注文書テンプレートに落とし込むためのデータの移動と編集について説明します。

このデータ移動と編集によって、FAX注文書作成完了までの8割方が完了します。

このデータ転記と編集の部分で、テンプレートにデータをうまく移すための工夫がいります。

単なるデータを積み上げるだけの作表ではないので、VBAコードの実行状態をデバッグなどで確認しながら作成作業を進めることが必要です。

ブック間のデータをつなげるVBAの作り方

faxhatyudata012kai

ここで言うブック間とは、「FAX注文書作成.xlsm」から「FAX注文書テンプレート.xlsm」へ ということです。

今ある状態を確認しておくと、

「FAX注文書作成.xlsm」では、いま使用するデータがどこにあるかというと、それぞれ出版社毎に振り分けられ「出版社別のシート」に入っています。

「FAX注文書テンプレート.xlsm」では、「テンプレート」シートを作り、注文書のひな形が作成されています。

データをつなぐための作業手順としては、

「FAX注文書テンプレート.xlsm」側のデータの受け皿として、「発注資料表」シートを準備します。

発注資料表は、注文書1枚分に書くデータごとに区切られています。(出版社別、発注書1枚で5品目ごと)

「FAX注文書作成」から「FAX注文書テンプレート」へ

faxhatyudata013kai

発注データの送り出し側ブックの「FAX注文書作成.xlsm」と、発注データの受け入れ側ブックの「FAX注文書テンプレート.xlsm」との役割分担に注意してください。

「FAX注文書テンプレート.xlsm」の準備

注文書のデータを受け入れるシートを作成します。

この記事の作業範囲では、「FAX注文書テンプレート.xlsm」で準備することは、シート名変更することだけです。

”Sheet2”のシート名を変更

「FAX注文書テンプレート.xlsm」を開き、”Sheet2”のシート名を「発注資料表」としてください。

faxhatyudata005aa

この名前変更した「FAX注文書テンプレート.xlsm」の「発注資料表」シートに作表を行います。

「FAX注文書作成.xlsm」の準備

この部分の作業範囲では、「FAX注文書作成.xlsm」のVBAコードで「FAX注文書テンプレート.xlsm」のシートのデータ編集をコントロールします。

書籍の発注データの移動と編集を行うVBAコードは、送り出し側の「FAX注文書作成.xlsm」の方で記述します。

間違わないようにしてください。

「FAX注文書作成.xlsm」の側で作業をコントロールすることで、シームレスに「FAX注文書テンプレート.xlsm」を起動させることが出来ます。

標準モジュール「Module3」を挿入

VBAコードをmodule3に記入します。モジュールの挿入追加をしてください。

追加方法の再度の確認は

データを受け入れ作表するVBAコード

「FAX注文書作成.xlsm」からデータの送り出しと受け入れをVBAで指示していきます。

「FAX注文書作成.xlsm」のVBEでModule3に以下のコードを記述します。

記述するVBA全コード

VBA
Option Explicit

Function wb() As Workbook
    Set wb = Workbooks("FAX注文書作成.xlsm")
End Function

Function wbT() As Workbook
    Set wbT = Workbooks("FAX注文書テンプレート.xlsm")
End Function

Function wsS() As Worksheet
    Set wsS = wb.Worksheets("出版社リスト")
End Function

Function wsHSD() As Worksheet
    Set wsHSD = wbT.Worksheets("発注資料表")
End Function

Sub 発注資料()
    Dim Hsheet As Worksheet
    Dim Ssheet As Worksheet
    Dim SPRow, VARow, HBRow As Long
    Dim VA, Hva, Fva, Iva As Variant
    Dim Bva, Jva, Gva, Nva As Variant
    Dim i, j, x, xx, y, t, tt As Long
    Dim w, ww, z, AR As Long
    Dim flag As Boolean
    Dim workb As Workbook
    Dim Fpa As String
        Fpa = ThisWorkbook.Path & "\FAX注文書テンプレート.xlsm"
'既にFAX注文書テンプレート.xlsmが開かれているかチェック
        flag = False
        For Each workb In Workbooks
            If workb.FullName = Fpa Then
                flag = True
                Exit For
            End If
        Next
        If flag = False Then
            Workbooks.Open Fpa
        End If
'発注先出版社数を調べる
        With wsS
            .Activate
            SPRow = .Cells(Rows.Count, 1).End(xlUp).Row
        End With
'出版社別シートから各注文書籍データを取り出す
        z = 1
        For i = 1 To SPRow
            VA = wsS.Range("A" & i).Value
            wb.Worksheets(VA).Activate
                VARow = Cells(Rows.Count, 1).End(xlUp).Row
                For j = 1 To VARow
                    With wb.Worksheets(VA)
                        .Activate
                        Hva = .Range("C" & j).Value
                        Fva = .Range("B" & j).Value
                        Iva = .Range("D" & j).Value
                        Bva = .Range("F" & j).Value
                        Jva = .Range("E" & j).Value
                        Gva = .Range("A" & j).Value
                        Nva = .Range("G" & j).Value
                    End With
'FAX注文書テンプレート.xlsmの発注資料表シートに書籍データを転記する
    'FAX注文書40ページ分の入力データ表を作成する
                    With wsHSD
                        .Activate
                        For t = 1 To 40
                            tt = t * 9 - 8
                            .Range("A" & tt) = "P" & t
                            .Range("A" & tt + 1) = "分類名"
                            .Range("B" & tt + 1) = "出版社名"
                            .Range("C" & tt + 1) = "書名"
                            .Range("D" & tt + 1) = "著者名"
                            .Range("E" & tt + 1) = "冊数"
                            .Range("F" & tt + 1) = "本体価格"
                            .Range("G" & tt + 1) = "シリーズ名"
                            .Range("H" & tt + 1) = "版数"
                            .Range("I" & tt + 1) = "送品条件"
                            .Range("J" & tt + 1) = "ISBNコード"
                            .Range("K" & tt + 1) = "客注名"
                            .Range("M" & 1) = "この列文字記入禁止"
                            With .Range(.Cells(tt, 1), .Cells(tt + 1, 13))
                                    .Font.Bold = True
                                    .Interior.ColorIndex = 35
                            End With
                        Next t
'FAX注文書のページ切り替えに付いての設定を行なう
                        On Error Resume Next
                        AR = WorksheetFunction.Match("P" & z, _
                                                        .Columns("A"), 0)
                        If AR = 0 Then
                            MsgBox "発注資料表の作成でエラーが発生" & _
                                "しました。" & vbCrLf & "発注資料作成" & _
                                "を再度行なってください。", _
                                            vbExclamation, "FAX注文書作成"
                            Exit Sub
                        End If
                        On Error GoTo 0
    'ひとつの出版社への注文数で6品目以上は改ページが必要
                        x = j Mod 5
                        xx = j \ 5
                        If x = 0 Then xx = j \ 6
                           y = AR + 1 + j + 4 * xx
                    '出版社名
                                .Range("B" & y).Value = Hva
                    '書名
                                .Range("C" & y).Value = Fva
                    '著者名
                                .Range("D" & y).Value = Iva
                    '冊数
                                .Range("E" & y).Value = Bva
                    '本体価格
                                .Range("F" & y).Value = Jva
                    '表示設定
                                .Range("J:J").NumberFormatLocal = "0_ "
                    'ISBNコード
                                .Range("J" & y).Value = Gva
                    '客注名
                                .Range("K" & y).Value = Nva
    '入力マーキングで最終のデータ入力行を確認出来るようにする
                    '入力行マーキング
                                .Range("M" & y).Value = "○"
                    End With
                Next j
    '改ページを行なう時のデータ入力セル位置を計算する
            wsHSD.Activate
                HBRow = wsHSD.Cells(Rows.Count, 13).End(xlUp).Row
                w = HBRow Mod 9
                ww = HBRow \ 9
                If ww = 0 Then
                    If w < 3 Then
                        z = 1
                    Else
                        z = 2
                    End If
                Else
                    z = ww + 1 + 1
                End If
            wsS.Activate
        Next i
        With wsHSD
            .Activate
            .Columns("A:M").AutoFit
        End With
End Sub

既にFAX注文書テンプレート.xlsmが開かれているかチェック

すでに「FAX注文書テンプレート.xlsm」が開いていれば”VBAのBOOK オープンの命令”をスルーして次の作業に移ります。開かれていなければ、BOOKをオープンします。

発注先出版社数を調べる

「出版社リスト」シートで、データの行数をカウントします。

出版社別シートから各注文書籍データを取り出す

出版社リストシートの出版社一覧表にある出版社順に、その出版社別シートにある注文書籍データをひとつづつ取り出します。

FAX注文書40ページ分の入力データ表を作成する

テンプレートにある様に出版社(発注先)ごと、発注品目5品目ごとに区分けして40ページまで作れるようにします。

「 For t = 1 To 40 」のところで 40を50にすれば50ページになります。自由に変更できます。

FAX注文書のページ切り替えに付いての設定を行なう

ページの表示文字「P1~」が表示されている行番号を取得します。

何かの原因でページ表示文字が表示されていない時はこのマクロを終了します。

ひとつの出版社への注文数で6品目以上は改ページが必要

出版社別シートから取り出した注文書籍データを1項目づつ「発注資料表」シートの表中のセルに入力していきます。

取り出した注文書籍データが6品目以上になった時は、同じ出版社で改ページをする必要があります。

入力マーキングで最終のデータ入力行を確認出来るようにする

「発注資料表」シートのM列に、いまどこまでページ数を使っているかを調べる”マーカー「〇」”を挿入します。

表中のどこまでの行に注文データだ入力されているかを調べられるようにします。

この行には、他に文字・記号などを書き入れないようにしてください。

改ページを行なう時のデータ入力セル位置を計算する

M列でデータ入力の最下行番号を調べて、ページの表示文字「P1~」を確定させます。

「FAX注文書作成.xlsm」操作ボタンシートに起動ボタンを設置

「操作ボタン」シートに発注資料作成ボタンを作ります。

faxhatyudata009a

ブック間でのデータ移動と編集のまとめ

faxhatyudata014kai

FAX注文書作成ツールでは、Webから抜き出した書籍データを単に羅列するのではありません。

書籍データを出版社別にソートし、出版社別に振り分け、更に同一出版社で6品目以上の場合は改ページして、注文票を作成する必要があります。

今回はこの注文書作成までのデータ移動・編集作業を行いました。

次には、そのデータを注文書テンプレートに1ページづつ記入して行く作業になります。

が、その前に、次回は先に、

抽出データを使った後、このマクロを次に使うための「データクリア」のコマンドコードを組み立てます。

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

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

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

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

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

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

 

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

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

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min