エクセルVBAでブック間でのデータの移動編集を行うコードを作ります。
データの送り出し側と受け入れ側の作業内容と役割をしっかり決めておきましょう。
じゅんぱ店長(@junpa33)です。
作成した書籍発注データを、注文書テンプレートに落とし込むためのデータの移動と編集について説明します。
このデータ移動と編集によって、FAX注文書作成完了までの8割方が完了します。
このデータ転記と編集の部分で、テンプレートにデータをうまく移すための工夫がいります。
単なるデータを積み上げるだけの作表ではないので、VBAコードの実行状態をデバッグなどで確認しながら作成作業を進めることが必要です。
FAX注文書作成の記事編成
- FAX注文書作成ツールの使い方とダウンロード
コンテンツ
ブック間のデータをつなげるVBAの作り方
ここで言うブック間とは、「FAX注文書作成.xlsm」から「FAX注文書テンプレート.xlsm」へ ということです。
今ある状態を確認しておくと、
「FAX注文書作成.xlsm」では、いま使用するデータがどこにあるかというと、それぞれ出版社毎に振り分けられ「出版社別のシート」に入っています。
「FAX注文書テンプレート.xlsm」では、「テンプレート」シートを作り、注文書のひな形が作成されています。
データをつなぐための作業手順としては、
「FAX注文書テンプレート.xlsm」側のデータの受け皿として、「発注資料表」シートを準備します。
発注資料表は、注文書1枚分に書くデータごとに区切られています。(出版社別、発注書1枚で5品目ごと)
「FAX注文書作成」から「FAX注文書テンプレート」へ
発注データの送り出し側ブックの「FAX注文書作成.xlsm」と、発注データの受け入れ側ブックの「FAX注文書テンプレート.xlsm」との役割分担に注意してください。
「FAX注文書テンプレート.xlsm」の準備
注文書のデータを受け入れるシートを作成します。
この記事の作業範囲では、「FAX注文書テンプレート.xlsm」で準備することは、シート名変更することだけです。
「FAX注文書テンプレート.xlsm」を開き、”Sheet2”のシート名を「発注資料表」としてください。
この名前変更した「FAX注文書テンプレート.xlsm」の「発注資料表」シートに作表を行います。
「FAX注文書作成.xlsm」の準備
この部分の作業範囲では、「FAX注文書作成.xlsm」のVBAコードで「FAX注文書テンプレート.xlsm」のシートのデータ編集をコントロールします。
書籍の発注データの移動と編集を行うVBAコードは、送り出し側の「FAX注文書作成.xlsm」の方で記述します。
間違わないようにしてください。
「FAX注文書作成.xlsm」の側で作業をコントロールすることで、シームレスに「FAX注文書テンプレート.xlsm」を起動させることが出来ます。
VBAコードをmodule3に記入します。モジュールの挿入追加をしてください。
追加方法の再度の確認は
データを受け入れ作表するVBAコード
「FAX注文書作成.xlsm」からデータの送り出しと受け入れをVBAで指示していきます。
「FAX注文書作成.xlsm」のVBEでModule3に以下のコードを記述します。
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」が開いていれば”VBAのBOOK オープンの命令”をスルーして次の作業に移ります。開かれていなければ、BOOKをオープンします。
「出版社リスト」シートで、データの行数をカウントします。
出版社リストシートの出版社一覧表にある出版社順に、その出版社別シートにある注文書籍データをひとつづつ取り出します。
テンプレートにある様に出版社(発注先)ごと、発注品目5品目ごとに区分けして40ページまで作れるようにします。
「 For t = 1 To 40 」のところで 40を50にすれば50ページになります。自由に変更できます。
ページの表示文字「P1~」が表示されている行番号を取得します。
何かの原因でページ表示文字が表示されていない時はこのマクロを終了します。
出版社別シートから取り出した注文書籍データを1項目づつ「発注資料表」シートの表中のセルに入力していきます。
取り出した注文書籍データが6品目以上になった時は、同じ出版社で改ページをする必要があります。
「発注資料表」シートのM列に、いまどこまでページ数を使っているかを調べる”マーカー「〇」”を挿入します。
表中のどこまでの行に注文データだ入力されているかを調べられるようにします。
この行には、他に文字・記号などを書き入れないようにしてください。
M列でデータ入力の最下行番号を調べて、ページの表示文字「P1~」を確定させます。
「FAX注文書作成.xlsm」操作ボタンシートに起動ボタンを設置
「操作ボタン」シートに「発注資料作成」ボタンを作ります。
ブック間でのデータ移動と編集のまとめ
FAX注文書作成ツールでは、Webから抜き出した書籍データを単に羅列するのではありません。
書籍データを出版社別にソートし、出版社別に振り分け、更に同一出版社で6品目以上の場合は改ページして、注文票を作成する必要があります。
今回はこの注文書作成までのデータ移動・編集作業を行いました。
次には、そのデータを注文書テンプレートに1ページづつ記入して行く作業になります。
が、その前に、次回は先に、
抽出データを使った後、このマクロを次に使うための「データクリア」のコマンドコードを組み立てます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。