バックナンバー検索用に、日々の送品データを集約してデータベースとします。
1つのファイルを1つのシートとして取り込み、さらにそのシートすべてを1シートにまとめます。
こんにちは、じゅんぱ店長(@junpa33)です。
今回からは、先回作成した送品予定表のバックアップファイルを利用して、
既に発売された雑誌のバックナンバーを検索できる仕組みを作ります。
送品予定表の内容についてはこちらをご覧ください。
「送品予定表作成」をつくる第1回目のこの記事では、
日々の送品予定表の複数のバックアップファイルを、1つのエクセルブックにまとめ上げる工程をVBA化(マクロ化)していきます。
バックナンバー検索ツールの記事編成
- バックナンバー検索ツールの使い方とダウンロード
- バックナンバー検索ツール作成手順
コンテンツ
バックナンバー検索用に送品データを加工編集する
今回は、前に作成したVBAソフトの送品予定表の出力バックアップデータを、
必要部分だけまとめて扱えるようにする部分のプログラムを作成します。
バックナンバー検索用のデータベースとして利用できるように、エクセルVBAで組み立てていきます。
VBA組み立ての作業ステップ
BOOK名(ファイル名)を「雑誌バックナンバー検索.xlsm」とします。
各シート名は
- 「Sheet1」を「検索結果」
- 「Sheet2」を「データまとめ」
- 「Sheet3」を「メモ」
とします。
ビジュアルベーシックエディタ(VBE)で標準モジュール(Module1)を挿入します。
ここでのVBAは、
各日付の名称で保存されている送品データファイルを、その「Sheet1」をコピーして、「雑誌バックナンバー検索.xlsm」の追加のシートとして日付ごとに取り込みます。
シート追加は、エクセルのスペックでは理論上無制限となっています。
ただ、それぞれお使いのPCの環境次第、メモリ容量次第のようですので、1年分か、半年分か、3か月か、1か月かはそれぞれ試しながらご判断ください。
シート構成が1枚づつ日付別になっていては、検索データとしては不都合なので、全ての日付を一つの大きな送品データとしてまとめる作業を行います。
これで検索するデータベースの出来上がりです。
検索作業が終わった後は、使ったデータを片付けておきます。
日別で取り込んだ送品データシートをすべてシート削除しておきます。
こちらのデータも使い終わった後は、クリアしておきます。
送品データを編集するVBAコード
①日別のバックアップ送品データを取り込む
VBAコードは以下のようになります。
Option Explicit
Sub 送品予定表転記()
Dim mb As Workbook
Dim wb As Workbook
Dim mbp As Variant
Dim fname As Variant
Dim sname As Variant
Dim n As Long
Application.ScreenUpdating = False
Set mb = ThisWorkbook
mbp = ThisWorkbook.Path
fname = Dir(mbp & "\*.xls")
n = 0
Do Until fname = Empty
If fname <> mb.Name Then
Worksheets.Add after:=mb.Worksheets(mb.Worksheets.Count)
Set wb = Workbooks.Open(mbp & "\" & fname)
wb.ActiveSheet.Cells.Copy _
Destination:=mb.Worksheets(mb.Worksheets.Count).Range("A1")
sname = wb.ActiveSheet.Range("B2")
mb.Worksheets(mb.Worksheets.Count).Name = sname
wb.Close (False)
n = n + 1
Range("A1").Select
End If
fname = Dir
Loop
Application.ScreenUpdating = True
Worksheets("検索結果").Select
Range("A1").Select
MsgBox n & "日分の送品予定表を取り込みました。", vbInformation, _
"雑誌バックナンバー検索"
End Sub
②シート化した送品データを「データまとめ」シートにまとめる
送品予定表を一つづつのシートにしましたが、今度はそれを一つのシートとしてまとめます。
これがバックナンバー検索のためのデータベースとなります。
VBAコードはこのようになります。
Sub データをまとめる()
Dim mb As Workbook
Dim Ws, Wsa As Worksheet
Dim sR, saR As Long
Set mb = ThisWorkbook
Set Wsa = mb.Worksheets("データまとめ")
For Each Ws In Worksheets
If Ws.Name <> "データまとめ" Or Ws.Name <> "検索結果" _
Or Ws.Name <> "メモ" Then
sR = Ws.Cells(Ws.Rows.Count, 1).End(xlUp).Row
saR = Wsa.Cells(Wsa.Rows.Count, 1).End(xlUp).Row + 1
If Wsa.Range("A2") = "" Then
saR = 1
Ws.Rows("1:" & sR).Copy Destination:=Wsa.Rows(saR)
Else
Ws.Rows("2:" & sR).Copy Destination:=Wsa.Rows(saR)
End If
End If
Next
Application.CutCopyMode = False
Worksheets("データまとめ").Select
With Range("A1").CurrentRegion
.Borders.LineStyle = xlLineStyleNone
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlHairline
End With
Call Module1.シート体裁
MsgBox "データまとめを完了しました", vbInformation, _
"雑誌バックナンバー検索"
End Sub
今回は、シート丸ごとコピペではありませんので、シートの体裁の部分で、セル幅などがデフォルト値に戻ってしまう部分があります。
そこで、設定したセル幅を復活させるために、部品化プロシージャーを設定します。
「シート体裁」という名称にします。
Callステートメントでこのプロシージャーを呼び出しています。
Sub シート体裁()
Dim mb As Workbook
Set mb = ThisWorkbook
With mb.Worksheets("検索結果")
.Range("A:L").Font.Size = 9
.Range("A:A").ColumnWidth = 4
.Range("B:B").ColumnWidth = 8
.Range("C:C").ColumnWidth = 10
.Range("D:D").ColumnWidth = 8
.Range("E:F").ColumnWidth = 4
.Range("G:G").ColumnWidth = 3
.Range("H:H").ColumnWidth = 11
.Range("I:I").ColumnWidth = 21
.Range("J:J").ColumnWidth = 7
.Range("K:K").ColumnWidth = 6
.Range("L:L").ColumnWidth = 6
End With
Range("A1").Select
End Sub
③日別送品データシートの全削除
この様になります。
Sub 送品予定表削除()
Dim Wsb As Worksheet
ThisWorkbook.Activate
Application.DisplayAlerts = False
For Each Wsb In Worksheets
If Wsb.Name <> "データまとめ" And Wsb.Name <> "検索結果" _
And Wsb.Name <> "メモ" Then
Wsb.Delete
End If
Next
Application.DisplayAlerts = True
MsgBox "送品予定表を削除しました", vbInformation, _
"雑誌バックナンバー検索"
End Sub
④取り込みデータのクリア
「データまとめ」シートをクリアします。
セルに入っているデータをクリアして、書式設定をデフォルトにします。
VBAコードはこちらです。
Sub データまとめクリア()
Dim mb As Workbook
Set mb = ThisWorkbook
With mb.Worksheets("データまとめ")
.Cells.Clear
.Cells.UseStandardHeight = True
.Cells.UseStandardWidth = True
End With
MsgBox "データまとめをクリアしました", vbInformation, _
"雑誌バックナンバー検索"
End Sub
バックナンバー検索用の送品データ編集のまとめ
雑誌バックナンバー検索ツールの作成について、今回も少々長い記事になってしまいますので、第1回から第3回までに分けることにしました。
今回は第1回目として、検索のためのデータベースを作るところを説明いたしました。
次回第2回目は、検索キーワード設定と検索結果の表示領域の部分を説明したいと思います。
エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる
(著者)大村あつし(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)
学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。