エクセルVBAで書誌の棚卸表を作成。調査個所別にシート表記する方法

kanseizaikoeyecatcha

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

 

雑誌と書籍の在庫管理表のソフト作成方法について、

 

今回の記事内容は、

在庫表に表示するデータを今まで作成・整理してきましたが、

それを清書という形で、新しいシートに表示します。

 

「書誌棚卸表.xlsm」での新しいシートの作成と在庫表表示の操作を行うVBAコードの説明です。

 

前の記事の確認をするにはこちら↓から。

本の在庫管理表の作成。書名をデータベースからマッチングさせる方法

 

「雑誌と書籍の在庫リスト」の完成形はこの記事をご覧ください。

【棚卸し】無料!在庫管理表の作成が面倒でなくなるエクセルVBAソフト

 

雑誌と書籍の在庫リスト作成に関連した記事はこちらになります。

「棚卸表作成」の記事一覧を開く

 

今回の書誌の棚卸表のコード作成の方針

 

コードの記述はModule3に記述します

 

「発行(制作)部署名」と「チェック場所(調査場所)」の項目を作成する在庫管理表に表示します。

調査場所名の新しいシートを作成し、そちらに作成した在庫管理表を表示します。

調査場所別にチェックできるようにシートを作成していきます。

プリントアウトすれば、提出できる状態の完成資料になる様に作り上げます。

 

Module3で記述するコード

kanseizaikoborder001

 

「場所別在庫表」というプロシージャーを作成します。

 

エクセルVBAコード記述の流れは、このような感じです。

別のVBA記述で、ユーザーフォームで作成する「コントロールパネル」に「発行部署」と「チェック場所名」を入力するテキストボックスを設置しておきます。

(ユーザーフォームについては後の記事で説明します。)

その「チェック場所名」をシート名として新しいシートを作成します。

もし「チェック場所名」が未記入であれば「年月日ー時間」をシート名とします。

 

その新しいシートの中で、

  • A列からG列を使用します。
  • サイズは「A4タテ用紙」にサイズ合わせをしています。
  • G列は「備考欄」として手書き入力スペースとしています。

 

プリントアウト時の在庫表のヘッダーには

  • 書誌在庫表(「チェック場所名」)」のタイトル名を付けています。
  • 発行日と「発行部署」が印字されます。「発行部署」については未記入の場合はカットされます。

フッターについてはページ数がセンターに印字されます。

 

MEMO

エクセルVBAコードの作成テクニック

”新しいシート”を作成し、そのシートで作表などの作業をしたい場合、

”新しいシート”をVBAコードで指定できるようにすることが必要です。

”新しいシート”を作成した時、その瞬間その”新しいシート”はフォーカスされています。

つまりアクティブシートの状態になっています。

このアクティブな状態の時に”名付け”を行います。(今回は変数名を付けています。)

一度名前を付けさえすれば、そのシート名を指定してシート操作を行えます。

 

 

MEMO

Format関数の使い方についてはこの記事を参考にしてください。

エクセルVBA Format関数をテッパン関数にする!実務で頻度の高い書式と使用例

最終行の取得についてはこちらを参考にしてください。

エクセルVBA データ入力済セルの最終行番号を取得する方法

For Each ~ Next ステートメントについてはこちらを参考にしてください.

VBA 回数不定のループ処理はDo LoopとFor Each

With ~ End With の使い方はこちらを参考にしてください。

With~End Withの使い方。VBAコードを簡潔に記述する

Len関数についてはこちらを参考にしてください。

エクセルVBA Len関数で文字列の文字数を知る方法

Sum関数についてはこちらの記事を参考にしてください。

エクセルVBA SUM関数で合計計算!実務で使えるコード作成

 

コード①

Sub 場所別在庫表()

Dim Wn As Variant, NWn As Variant
Dim Zrow As Long, Zrowb As Long

Worksheets("作業シート").Select
    Wn = SpaceName
    Range("E2").Value = Wn
    If Wn = "" Then
        NWn = Format(Now(), "yymmdd-hhmm")
    Else
        NWn = Wn
    End If
    Worksheets.Add After:=Worksheets(Worksheets.Count)
    ActiveSheet.Name = NWn

Worksheets("作業シート").Select
    Zrow = Cells(Rows.Count, 6).End(xlUp).Row
    Range("E1", "J" & Zrow).Copy _
        Destination:=Worksheets(NWn).Range("A1")
    Application.CutCopyMode = False
    Worksheets(NWn).Select
    Range("G1") = "備考"
    Range("C" & Zrow + 1) = "合計"

    For Each CELS In Range(Cells(2, 2), Cells(Zrow, 2))
        If CELS.Value = "" Then
            Rows(CELS.Row).Delete
        End If
    Next CELS
    
    Zrowb = Cells(Rows.Count, 3).End(xlUp).Row
    
    For t = 2 To Zrowb
    If Len(Range("B" & t)) = 6 Then
        Range("B" & t) = "0" & Range("B" & t)
    End If
    Next t

Range("A:G").Font.Size = 10
Range("A:A").ColumnWidth = 8
Range("B:B").ColumnWidth = 15
Range("C:C").ColumnWidth = 25
Range("D:D").ColumnWidth = 10
Range("E:E").ColumnWidth = 10
Range("G:G").ColumnWidth = 10
Range("A1").RowHeight = 21
Range("A1").Select
With Range("F:F")
    .NumberFormatLocal = "\#,##0;\-#,##0"
    .ColumnWidth = 10
End With

With Worksheets(NWn).PageSetup
    .PrintTitleRows = "$1:$1"
    .PrintTitleColumns = ""
    .PrintArea = "A1:G" & Zrowb
    .CenterHeader = "書誌在庫表" & "(" & NWn & ")"
    .RightHeader = Date & Chr(10) & ShopName
    .CenterFooter = "&P" & "/" & "&N"
    .PaperSize = xlPaperA4
    .Orientation = xlPortrait
    .LeftMargin = Application.CentimetersToPoints(2)
    .RightMargin = Application.CentimetersToPoints(0.5)
    .TopMargin = Application.CentimetersToPoints(3)
    .BottomMargin = Application.CentimetersToPoints(1)
    .HeaderMargin = Application.CentimetersToPoints(1.5)
    .FooterMargin = Application.CentimetersToPoints(1.5)
End With
Range("F" & Zrowb) = WorksheetFunction.Sum(Range("F2", "F" & Zrowb - 1))

Range(Cells(1, 1), Cells(Zrowb, 7)).Select
With Selection.Borders
    .LineStyle = xlContinuous
    .Weight = xlHairline
End With
    Range("A1").Select
End Sub

 

こんな感じです。

kanseizaikohyo0012a

 

 

ここまでのまとめ

 

 

一連の流れとしては、これで在庫管理表は完成となります。

ソフトの設計方針として、在庫調査個所毎にシートを作成するようにしています。

さらにそれらのシートを統合した大きな1枚のシートを作りその総合計を計算できるようにすることも考えましたが、

実場面で調査するボリュームが分かりませんし、調査チームも複数かもしれませんし、という様にそれぞれに使用する場面が異なると思います。

ですので、この部分はご利用の方がさらにカスタマイズしていただければと思います。

 

1つの在庫調査個所についての作成終了後は次の調査個所ということになります。

その場合、同じようにオペレーションいただくと”先にできたシート”の後に”新しく調査した個所名のシート”が作成されます。

 

次の記事では、そういった作業の流れにおいて次の作業のために

「作業が終了した個所のデータをクリアーするVBA」を組み立てていきます。

 

次の記事を読むのはこちらから↓

エクセルで在庫表をつくる。データクリアーのためのVBAを解説

 

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAを独学で習得するためのポイントは?良書との出会いは重要

 

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできると思います。
エクセルVBA初級者がUdemyで動画学習する講座おすすめ5選と無料講座の上手な使い方。

 

エクセルVBAを使いだして、始めのうちに知っておきたい内容を纏めています。

「VBA最速理解」の記事一覧を開く

 

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

 

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