雑誌バックナンバー検索に送品データを編集し利用する

zassibacknoeyecatchaa

バックナンバー検索用に、日々の送品データを集約してデータベースとします。
1つのファイルを1つのシートとして取り込み、さらにそのシートすべてを1シートにまとめます。

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

今回からは、先回作成した送品予定表のバックアップファイルを利用して、

既に発売された雑誌のバックナンバーを検索できる仕組みを作ります。

送品予定表の内容についてはこちらをご覧ください。

subcateyecatch001c 「送品予定表作成」をつくる

第1回目のこの記事では、

日々の送品予定表の複数のバックアップファイルを、1つのエクセルブックにまとめ上げる工程をVBA化(マクロ化)していきます。

バックナンバー検索用に送品データを加工編集する

gyoka1_1138b

今回は、前に作成したVBAソフトの送品予定表の出力バックアップデータを、

必要部分だけまとめて扱えるようにする部分のプログラムを作成します。

バックナンバー検索用のデータベースとして利用できるように、エクセルVBAで組み立てていきます。

VBA組み立ての作業ステップ

BOOK名(ファイル名)を「雑誌バックナンバー検索.xlsm」とします。

各シート名は

  • 「Sheet1」を「検索結果」
  • 「Sheet2」を「データまとめ」
  • 「Sheet3」を「メモ」

とします。

ビジュアルベーシックエディタ(VBE)で標準モジュール(Module1)を挿入します。

雑誌バックナンバー検索.xlsmに送品データを取り込む

ここでのVBAは、

各日付の名称で保存されている送品データファイルを、その「Sheet1」をコピーして、「雑誌バックナンバー検索.xlsm」の追加のシートとして日付ごとに取り込みます。

シート追加は、エクセルのスペックでは理論上無制限となっています。

ただ、それぞれお使いのPCの環境次第、メモリ容量次第のようですので、1年分か、半年分か、3か月か、1か月かはそれぞれ試しながらご判断ください。

取り込んだ送品データシートを、1つのシートにまとめる

シート構成が1枚づつ日付別になっていては、検索データとしては不都合なので、全ての日付を一つの大きな送品データとしてまとめる作業を行います。

これで検索するデータベースの出来上がりです。

日別の送品データシートを削除する(検索作業後の処理)

検索作業が終わった後は、使ったデータを片付けておきます。

日別で取り込んだ送品データシートをすべてシート削除しておきます。

データまとめシートの内容のクリア

こちらのデータも使い終わった後は、クリアしておきます。

送品データを編集するVBAコード

①日別のバックアップ送品データを取り込む

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
backnoken004kai
日付別に送品データが取り込まれる

②シート化した送品データを「データまとめ」シートにまとめる

送品予定表を一つづつのシートにしましたが、今度はそれを一つのシートとしてまとめます

これがバックナンバー検索のためのデータベースとなります。

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

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ステートメントでこのプロシージャーを呼び出しています。

VBA
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
backnoken005kai
日付順に一覧表化でまとめられる

③日別送品データシートの全削除

この様になります。

VBA
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コードはこちらです。

HTML
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回目は、検索キーワード設定と検索結果の表示領域の部分を説明したいと思います。

vbastudyeyecatch002 エクセルVBAを独学で習得する!ために大切な7つのポイントを解説します

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

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

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

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

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

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

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

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

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

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

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

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

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min