【VBA】在庫管理表の管理を自動化する方法|ボタン1クリックで編集完了

 

毎日エクセルを開いて、在庫管理表の数字を手入力したり、取引先ごとにデータをコピペしたり……そんなルーティーン作業に追われていませんか?

「今日もこの作業か」と感じながら、気づけば30分以上が過ぎていた、という経験がある方は多いはずです。

 

実はその作業、VBAを使えばボタン1クリックで処理できます。

 

私はプログラミング未経験からVBAを独学で勉強し、在庫管理を自動化するマクロを開発しました。

今では、「取引先別の発注票の自動作成」「納期が近いデータの色分け表示」「納品済みデータの自動削除」など、手間のかかる作業全てをたった数秒で処理しています。

 

この記事では、在庫管理表の自動化をVBAでどう実現するか、具体的なコードと解説を交えながら紹介していきます。

VBAをこれから学びたい方にも、すでに学習中の方にも役立つ内容になっています。

ぜひ最後まで読み進めてみてください。

 

広告

在庫管理表の手作業、こんな悩みを抱えていませんか?

在庫管理という業務は、どの会社・どの現場でも必ずと言っていいほど発生する作業です。

「品名」「価格」「取引先」「納期」「在庫数」といった情報を一覧表で管理。

 

職員全員が一覧表をチェックすることで効率よく在庫管理されていると思いまうが、

その管理が手作業中心になっていると思わぬ落とし穴があります。

 

手作業による在庫管理の3つの問題点

まず1つ目の問題は「ミスが起きやすい」という点です。

毎日何十行ものデータを目視で確認しながら手入力していると、転記ミスや見落としが発生しやすくなります。

特に「納期が迫っているのに気づかなかった」というようなヒューマンエラーは、ビジネスの信頼に直結します。

 

2つ目の問題は「時間が取られすぎる」ことです。

取引先ごとに情報をコピペして別シートに転記する、納期が近いデータを手動で色付けする、納品済みのデータを1行ずつ削除する、など

このような作業は、一つひとつは地味でも積み重なると大きな時間のロスになります。

 

3つ目の問題は「属人化してしまう」ことです。

同じ作業を担当者が手動で行っていると、その人が休んだとき誰も対応できない、という状況が生まれます。

マクロ化してしまえば、誰でもボタン1つで同じ処理ができるようになります。

 

VBAで在庫管理表を自動化するとどう変わる?

結論から言うと、

VBAを使えば在庫管理にかかる時間を大幅に削減

できます。

 

私が開発した在庫管理マクロでは、以下の4つの処理を自動化しています。

  • 指定した取引先の情報を別シートに転記して発注票を作成する
  • 納期が7日以内のデータを緑色に自動変更する
  • 納期が3日以内のデータを赤色に自動変更する
  • 納入日が入力されたデータを自動削除する

これらをひとつひとつ手作業で行っていた場合、慣れた人でも毎日20〜30分はかかります。

 

VBAで自動化すれば、同じ作業が数秒で完了。年換算すると、数十時間の節約になる計算です。

手間のかかるルーティーン作業が必要となるエクセル作業はVBAを導入することで、作業効率を格段にアップさせることができます。

 

在庫管理表自動化マクロに使われているVBA

今回紹介する在庫管理表自動化マクロは、大きく3つのマクロに分かれています。

  • 取引先別に発注票を自動作成するマクロ
  • 納期までの期日によって色を変えるマクロ
  • 納入済みデータを自動削除するマクロ

それぞれを独立したプロシージャとして作成し、最終的に1つのボタンから一括実行できる構成にしています。

 

①取引先別に発注票を自動作成するVBA

在庫管理の中でも特に手間がかかるのが「取引先ごとに情報を整理して発注票を作る」作業です。

一覧表の中から特定の取引先の行だけを抽出し、別シートに貼り付ける、という作業を毎回手作業でやっていると、どうしても時間がかかります。

 

VBAを使えば、取引先名を指定するだけで自動的に発注票シートへ転記できます。

以下は、「在庫管理」シートから指定した取引先のデータを「発注票」シートへ転記するVBAコードです。

Sub 発注票作成()

Dim ws管理 As Worksheet
Dim ws発注 As Worksheet
Dim 最終行 As Long
Dim 転記行 As Long
Dim i As Long
Dim 取引先名 As String

'---シートを変数にセット---
Set ws管理 = Worksheets("在庫管理")
Set ws発注 = Worksheets("発注票")

'---発注票シートをリセット(2行目以降を削除)---
ws発注.Rows("2:" & ws発注.Rows.Count).ClearContents

'---転記先の開始行---
転記行 = 2

'---取引先名をInputBoxで指定---
取引先名 = InputBox("転記する取引先名を入力してください")

'---在庫管理シートの最終行を取得---
最終行 = ws管理.Cells(Rows.Count, 1).End(xlUp).Row

'---1行ずつデータを確認して転記---
For i = 2 To 最終行
If ws管理.Cells(i, 3).Value = 取引先名 Then
ws発注.Cells(転記行, 1).Value = ws管理.Cells(i, 1).Value '品名
ws発注.Cells(転記行, 2).Value = ws管理.Cells(i, 2).Value '価格
ws発注.Cells(転記行, 3).Value = ws管理.Cells(i, 3).Value '取引先
ws発注.Cells(転記行, 4).Value = ws管理.Cells(i, 4).Value '納期
転記行 = 転記行 + 1
End If
Next i

MsgBox 取引先名 & "の発注票を作成しました。"

End Sub

このコードがどのように動くか、順を追って説明します。

 

まず Set ws管理 = Worksheets(“在庫管理") の部分で、在庫管理シートと発注票シートをそれぞれ変数にセットします。

次に ws発注.Rows(“2:" & ws発注.Rows.Count).ClearContents で、前回の転記データをリセットします。

毎回クリアすることで、古いデータが残って混在するトラブルを防げます。

 

InputBox では、転記したい取引先名を実行のたびに入力できるようにしています。

どの取引先の発注票を作るかを毎回聞いてくれるので、1つのマクロで複数の取引先に対応できます。

InPutBoxの表示画面

 

For i = 2 To 最終行 のループ処理で、在庫管理シートの2行目から最終行まで1行ずつ確認し、C列(取引先列)が指定した取引先名と一致する行だけを発注票シートへ転記します。

最後に MsgBox で完了メッセージを表示して処理が終わります。

マクロ実行結果

 

指定した取引先の情報だけ発注票シートにコピペすることができました。

 

関連記事「別シートにテキストを自動転記」では、シートを指定するVBA、転記VBAが設定されたエクセルファイルをダウンロードすることができます。

 

 

簡単な転記VBAを設定したいという方は参考にしてみてください。

 

 

②納期が迫ったデータを色分けするVBA

「納期が近いのに気づかなかった」というミスを防ぐために、データを色で視覚的に管理する方法はとても有効です。

 

私が開発したマクロでは、「7日以内は緑色」「3日以内は赤色」という2段階の色分けを自動で行います。

人間の目は色の変化に敏感なので、ひと目で緊急度を把握できるようになります。

 

色分けをするサンプルコードがこちら

Sub 納期色分け()

Dim ws As Worksheet
Dim 最終行 As Long
Dim i As Long
Dim 今日 As Date
Dim 納期 As Date
Dim 残日数 As Long

Set ws = Worksheets("在庫管理")
今日 = Date
最終行 = ws.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To 最終行

'---納入欄が空欄の行だけ処理---
If ws.Cells(i, 5).Value = "" Then

納期 = ws.Cells(i, 4).Value
残日数 = 納期 - 今日

'---いったん背景色をリセット---
ws.Rows(i).Interior.ColorIndex = xlNone

If 残日数 <= 3 Then
'---3日以内は赤色---
ws.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(255, 0, 0)
ElseIf 残日数 <= 7 Then
'---7日以内は緑色---
ws.Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(0, 255, 0)
End If

End If

Next i

MsgBox "納期の色分けを完了しました。"

End Sub

コードの流れを解説します。

 

今日 = Date でマクロを実行した当日の日付を取得。

残日数 = 納期 – 今日 でD列の納期日から今日の日付を引いた残り日数を計算します。

 

If ws.Cells(i, 5).Value = “" という条件は、E列(納入欄)が空欄の行だけを対象にするという意味です。

既に納入済みのデータには色を付けないようにするためです。

ws.Rows(i).Interior.ColorIndex = xlNone でいったん背景色をリセットしてから、残日数に応じて赤か緑の色を設定します。

 

実行結果がこちら

色分けマクロ実行結果

 

毎回リセットすることで、納期が更新されたときに前の色が残ってしまうトラブルを防ぐことができます。

 

③納入済みデータを自動削除するVBA

納入が完了したデータはリストに残り続けると、表が見づらくなります。

E列(納入欄)に日付が入力されたデータを自動的に削除する処理を追加することで、常に「未納入のデータだけ」が一覧表に残るようになります。

 

納入済みデータを削除するサンプルコードがこちら

Sub 納入済み削除()

Dim ws As Worksheet
Dim 最終行 As Long
Dim i As Long

Set ws = Worksheets("在庫管理")
最終行 = ws.Cells(Rows.Count, 1).End(xlUp).Row

'---下から順に処理(行削除のためループを逆順に)---
For i = 最終行 To 2 Step -1
If ws.Cells(i, 5).Value <> "" Then
ws.Rows(i).Delete
End If
Next i

MsgBox "納入済みのデータを削除しました。"

End Sub

このコードで重要なポイントは「For i = 最終行 To 2 Step -1」の部分です。

行を削除するときは、上から順番に処理すると行番号がずれてしまいミスが起きます。

下から上に向かって処理することで、行番号のずれを防ぐことが可能です。

 

If ws.Cells(i, 5).Value <> “" の条件でE列(納入欄)に何らかの値が入っている行を検出し、ws.Rows(i).Delete でその行を削除します。

 

実行結果がこちら

納入済みデータを削除するマクロの実行結果

 

シンプルな構造ですが、「逆順ループ」という考え方を覚えておくと他のマクロでも応用できます。

 

4つのマクロをボタン1つで一括実行する方法

個別に実行できるマクロが揃ったら、最後に「一括実行マクロ」を作成しましょう。

ボタンを1つ押すだけで全処理が流れる仕組みにすれば、毎日の作業がさらにスムーズになります。

 

一括実行マクロのサンプルコードがこちら

Sub 在庫管理一括処理()

Call 納期色分け
Call 納入済み削除
MsgBox "在庫管理の一括処理が完了しました。"

End Sub

Call 命令を使うことで、他のプロシージャ(マクロ)を呼び出して実行できます。

 

Callの使い方については、関連記事「Callの使い方を徹底解析」で詳しく紹介しています。

→ → → 「Callの使い方を徹底解析」記事はこちら

 

上記では発注票作成は InputBox での入力が必要なため除外し、色分けと削除のみを一括処理にしています。

このマクロをエクセルシート上に配置したボタンに登録すれば、誰でも迷わずボタン1クリックで処理が実行できます。

 

ボタンの設置は「開発タブ」→「挿入」→「フォームコントロール」→「ボタン」の順で行い、マクロの登録画面で 在庫管理一括処理 を選択するだけです。

ボタン作成方法

 

 

VBAで在庫管理を自動化するメリットとスキルの活用法

ここまで在庫管理を自動化するVBAを紹介してきましたが、こうしたマクロが自分で作れるようになると、仕事の幅が大きく広がります。

私自身、プログラミング未経験から独学でVBAを習得し、現在では年間50件程度のマクロ開発を受注しています。

 

在庫管理の自動化マクロのように「業務の課題を特定し、それを解決するコードを書く」という経験を積むことで、実務で使えるVBAスキルを身につけることが可能。

VBAスキルを収益化することも十分可能で、クラウドソーシングサービスを通じてマクロ開発の依頼を受けることができます。

 

「VBAスキルで副業収入を得たい」という方には、私の体験談をまとめた記事も参考にしてみてください。

 

 

これからVBAを学ぶ人が最初にやるべきこと

VBAの学習でつまずく人の多くは「何から始めればいいかわからない」という壁にぶつかります。

 

私が実践した方法は、

「自動化したい業務を決める→ネットや参考書で必要なVBAを調べる→基本コードを組み合わせて1つのマクロを作る→デバックを繰り返す→完成したマクロで実際に業務を行う→使用したVBAを復習する」

という一連の流れです。

最初から難しいコードを書こうとする必要はありません。

 

ネットや参考書に掲載されているコードをそのままコピーして1行ずつ実行し、どんな動きをするかを確認しながら覚えていくのが最も効率的な方法です。

在庫管理の自動化でも、今回紹介したコードをそのまま動かしてみるところから始めてみてください。

 

VBAの学習方法についてさらに詳しく知りたい方は、こちらの記事も参考にどうぞ。

 

 

VBAスキルを身につけて案件を受注するまでの流れ

VBAを使いこなせるようになると、企業や個人からマクロ開発の依頼を受けることができるようになりますが、すぐに仕事を任されることはありません。

 

どのようなマクロ開発の実績があるのか、どの程度のVBAスキルがあるのか、依頼した場合どれくらい作業時間を確保できるのか、など

あなたのアピールポイントを依頼者に伝える必要があります。

 

「この人にならマクロ開発をお願いしたい!!」と思わせなければ、高度なVBAスキルを身に付けても収益化するこはできません。

 

「案件がなかなか見つからない」という方向けに、私が実践してきた案件獲得の方法も別の記事でまとめています。

 

 

まとめ:在庫管理の自動化はVBAの入り口として最適

今回紹介した在庫管理の自動化マクロは、以下の4つの処理で構成されています。

 

  • 取引先別に発注票を自動作成するマクロ
  • 納期7日以内のデータを緑色にするマクロ
  • 納期3日以内のデータを赤色にするマクロ
  • 納入済みデータを自動削除するマクロ

どれもシンプルな構造のVBAで構成されており、初心者でも理解しやすいコードになっています。

業務内容に合わせて、掲載しているサンプルコードをアレンジしてみてください。

 

もし「自分の業務に合わせた複雑なチェック処理を実装したい」「既存のマクロを改良したい」といったご要望がありましたら、マメBlogのエクセルマクロ開発依頼にご相談ください。

 

 

業務内容に合わせたオーダーメイドマクロを設定させていただきます。

 

最後まで読んでいただきありがとうございました。

エクセルVBAを使って面倒なルーティーン作業を自動化しちゃいましょう。