- 公開日:
エクセルで在庫管理をマクロで簡単にする方法
この記事では、エクセルでマクロを使って在庫管理を簡単にする方法をご紹介します。
マクロを使うことで作業効率を向上したり、ミスを減らしたりすることができます。
マクロで入出庫管理をする方法や、在庫を検索する方法などについてご紹介します。
Excelを使った日付選択のマクロを無料でダウンロード!
Excelでカレンダーから日付を入力できるマクロを無料でダウンロードできます。コードを変更すれば、カレンダーの背景色や、今日の日付の色を変更したりとカスタマイズすることも可能です。
エクセルで在庫管理をマクロで簡単にする方法
エクセルで在庫管理を行う際に、マクロで操作を簡単にする方法をご紹介します。
マクロを使う場合は、「開発タブ」を表示させる必要があります。
開発タブはデフォルトでは表示されていないため、以下の記事を参考に表示させましょう。
マクロで在庫管理表の入出庫履歴を管理する
マクロで在庫管理表の入出庫履歴を管理する方法をご紹介します。
在庫管理で特に大切なのが、入出庫履歴をしっかり記録しておくことです。
以下では、マクロで入庫/出庫を記録する方法をご紹介します。
まずは「在庫管理表」「入出庫履歴」という名前のシートを作成します。
①シート名に在庫管理表と入力して、②上記の画像のように「商品ID」「商品名」「カテゴリ」「在庫数」という4つの項目名のリストを作成しておきます。
①もう一つシートを作成してシート名に「入出庫履歴」と入力します。
②1行目に「日時」「商品ID」「商品名」「カテゴリ」「入出庫」「数量」「在庫数」の7つの項目名を入力しておきます。
次にマクロを設定します。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集画面が表示されます。
①「新しい標準モジュール」、②「標準モジュール」の順に選択します。
以下のコードをコピーして貼り付けます。
以下は「情報を入力すると在庫管理表シートに在庫数が、入出庫履歴シートに入出庫記録が自動記録される」という意味のコードです。
Sub 入庫()
Dim wsInv As Worksheet
Set wsInv = ThisWorkbook.Sheets("在庫管理表")
Dim wsHist As Worksheet
Set wsHist = ThisWorkbook.Sheets("入出庫履歴")
Dim productID As String
productID = InputBox("入庫する商品IDを入力してください:")
Dim rng As Range
Set rng = wsInv.Range("A:A").Find(productID, , xlValues, xlWhole)
If Not rng Is Nothing Then
Dim addAmount As Long
addAmount = InputBox("入庫する数量を入力してください:")
rng.Offset(0, 3).Value = rng.Offset(0, 3).Value + addAmount
' 履歴に記録
Dim newRow As Long
newRow = wsHist.Cells(wsHist.Rows.Count, 1).End(xlUp).Row + 1
wsHist.Cells(newRow, 1).Value = Now
wsHist.Cells(newRow, 2).Value = productID
wsHist.Cells(newRow, 3).Value = rng.Offset(0, 1).Value
wsHist.Cells(newRow, 4).Value = rng.Offset(0, 2).Value
wsHist.Cells(newRow, 5).Value = "入庫"
wsHist.Cells(newRow, 6).Value = addAmount
wsHist.Cells(newRow, 7).Value = rng.Offset(0, 3).Value
MsgBox "在庫が入庫され、履歴が記録されました。"
Else
MsgBox "商品IDが見つかりません。"
End If
End Sub
シート名を変更したい場合は、3行目と6行目の「在庫管理表」「入出庫履歴」の部分を任意のシート名に変更してください。
シート名が一字でも違うと正しく動作しないので、必ず実際のシート名と同じものを入力してください。
もう一つ標準モジュールを開きます。
①「新しい標準モジュール」、②「標準モジュール」の順に選択します。
以下のコードをコピーして貼り付けます。
以下は「使用した物品の情報を入力すると、自動で入出庫履歴に記録される」という意味のコードです。
Sub 出庫()
Dim wsInv As Worksheet
Set wsInv = ThisWorkbook.Sheets("在庫管理表")
Dim wsHist As Worksheet
Set wsHist = ThisWorkbook.Sheets("入出庫履歴")
Dim productID As String
productID = InputBox("出庫する商品IDを入力してください:")
Dim rng As Range
Set rng = wsInv.Range("A:A").Find(productID, , xlValues, xlWhole)
If Not rng Is Nothing Then
Dim removeAmount As Long
removeAmount = InputBox("出庫する数量を入力してください:")
If rng.Offset(0, 3).Value >= removeAmount Then
rng.Offset(0, 3).Value = rng.Offset(0, 3).Value - removeAmount
' 履歴に記録
Dim newRow As Long
newRow = wsHist.Cells(wsHist.Rows.Count, 1).End(xlUp).Row + 1
wsHist.Cells(newRow, 1).Value = Now
wsHist.Cells(newRow, 2).Value = productID
wsHist.Cells(newRow, 3).Value = rng.Offset(0, 1).Value
wsHist.Cells(newRow, 4).Value = rng.Offset(0, 2).Value
wsHist.Cells(newRow, 5).Value = "出庫"
wsHist.Cells(newRow, 6).Value = removeAmount
wsHist.Cells(newRow, 7).Value = rng.Offset(0, 3).Value
MsgBox "在庫が出庫され、履歴が記録されました。"
Else
MsgBox "在庫が不足しています。"
End If
Else
MsgBox "商品IDが見つかりません。"
End If
End Sub
コードを貼り付けたら、「保存」を選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①任意の保存場所(例:デスクトップ)を選択します。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
マクロが作成できました。次にマクロボタンを作成します。
①「開発」タブを選択します。
②「挿入」、③フォームコントロールの「ボタン(フォーム コントロール)」の順に選択します。
マウスポインターが十字マークになったら、任意の位置でドラッグしてボタンを描画します。
描画が終わると、「マクロの登録」ダイアログボックスが自動的に表示されます。
①作成したマクロ(例:入庫)を選択し、②「OK」ボタンを押します。
マクロボタンが作成できました。
ボタンの名前を変更する場合は、①マクロボタンを右クリックして、②「テキストの編集」を選択します。
任意の名前(例:入庫)を入力します。
入庫の記録ボタンが完成しました。
同様の手順で、出庫を記録するマクロボタンも作成しましょう。
ボタンの作成が終わったら、「入庫」ボタンを押します。
入庫を記録するダイアログボックスが表示されます。
①入庫する商品ID(例:18)を入力し、②「OK」ボタンを押します。
①次に入庫する数量(例:3)を入力し、②「OK」ボタンを押します。
「在庫が入庫され、履歴が記録されました。」というメッセージが表示されたら、「OK」ボタンを押します。
「入出庫履歴」シートを選択すると、入庫した物品の情報が自動的に記録されています。
出庫を入力すると上記の画像のようになります。
以上の操作で、入出庫履歴を自動的に記録するマクロを設定できました。
在庫管理を簡単にするさまざまなマクロ
在庫管理表の操作を簡単にするさまざまなマクロをご紹介します。
上記でご紹介した入出庫管理のマクロと組み合わせると、更に便利に利用できます。
マクロの登録方法は、上記「マクロで在庫管理表の入出庫履歴を管理する」セクションを参考にして下さい。
新しい物品を登録する
在庫管理表に新しい物品の情報を登録したい場合に、便利に使えるマクロをご紹介します。
以下のコードを、新しい標準モジュールにコピーして貼り付けましょう。
貼り付けたらキーボードのCtrl + Sを押して上書き保存します。
Sub 物品の追加()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫管理表")
Dim newRow As Long
newRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(newRow, 1).Value = InputBox("商品IDを入力してください:")
ws.Cells(newRow, 2).Value = InputBox("商品名を入力してください:")
ws.Cells(newRow, 3).Value = InputBox("カテゴリを入力してください:")
ws.Cells(newRow, 4).Value = InputBox("在庫数を入力してください:")
MsgBox "新しい在庫が追加されました。"
End Sub
必要であれば、上記「マクロで在庫管理表の入出庫履歴を管理する」でセクションを参考に、マクロボタンを作成しましょう。
作成したらマクロボタンを押します。
物品を登録できるダイアログボックスが表示されます。
①「商品ID」を入力して、②「OK」ボタンを押します。
①「商品名」を入力して、②「OK」ボタンを押します。
①「カテゴリ」を入力して、②「OK」ボタンを押します。
①「在庫数」を入力して、②「OK」ボタンを押します。
「新しい在庫が追加されました。」というメッセージが表示されたら、「OK」ボタンを押します。
すると、表の一番下の行に新しい物品情報が登録されます。
在庫を検索する
在庫管理表の物品や在庫を検索するマクロをご紹介します。
以下のコードを、新しい標準モジュールにコピーして貼り付けましょう。
貼り付けたらキーボードのCtrl + Sを押して上書き保存します。
Sub 在庫の検索()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫管理表")
Dim searchType As String
searchType = InputBox("検索タイプを入力してください (1: 商品名, 2: カテゴリ):")
Dim searchValue As String
searchValue = InputBox("検索値を入力してください:")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim i As Long
Dim message As String
message = "検索結果:" & vbCrLf
For i = 2 To lastRow ' Assuming first row is header
If (searchType = "1" And ws.Cells(i, 2).Value Like "*" & searchValue & "*") Or _
(searchType = "2" And ws.Cells(i, 3).Value Like "*" & searchValue & "*") Then
message = message & "商品ID: " & ws.Cells(i, 1).Value & ", 商品名: " & ws.Cells(i, 2).Value & _
", カテゴリ: " & ws.Cells(i, 3).Value & ", 在庫数: " & ws.Cells(i, 4).Value & vbCrLf
End If
Next i
If message = "検索結果:" & vbCrLf Then
MsgBox "該当する商品が見つかりませんでした。"
Else
MsgBox message
End If
End Sub
必要であれば、上記「マクロで在庫管理表の入出庫履歴を管理する」でセクションを参考に、マクロボタンを作成しましょう。
作成したらマクロボタンを押します。
検索するダイアログボックスが表示されます。
①商品名を検索する場合は「1」、カテゴリを検索する場合は「2」を入力します。
②「OK」ボタンを押します。
①検索するワードを入力し、②「OK」ボタンを押します。
すると、検索結果として該当のデータが表示されました。
「OK」ボタンを押すと、ダイアログボックスが閉じます。