• 公開日:

エクセルで在庫管理をマクロで簡単にする方法

この記事では、エクセルでマクロを使って在庫管理を簡単にする方法をご紹介します。

マクロを使うことで作業効率を向上したり、ミスを減らしたりすることができます。

マクロで入出庫管理をする方法や、在庫を検索する方法などについてご紹介します。

Excelを使った日付選択のマクロを無料でダウンロード!

Excelでカレンダーから日付を入力できるマクロを無料でダウンロードできます。コードを変更すれば、カレンダーの背景色や、今日の日付の色を変更したりとカスタマイズすることも可能です。

エクセルで在庫管理をマクロで簡単にする方法

エクセルで在庫管理を行う際に、マクロで操作を簡単にする方法をご紹介します。

開発タブについて

マクロを使う場合は、「開発タブ」を表示させる必要があります。

開発タブはデフォルトでは表示されていないため、以下の記事を参考に表示させましょう。

エクセルの開発タブを表示する方法

マクロで在庫管理表の入出庫履歴を管理する

マクロで在庫管理表の入出庫履歴を管理する方法をご紹介します。

在庫管理で特に大切なのが、入出庫履歴をしっかり記録しておくことです。

以下では、マクロで入庫/出庫を記録する方法をご紹介します。

表を作成する

まずは「在庫管理表」「入出庫履歴」という名前のシートを作成します。

シート名に在庫管理表と入力して、②上記の画像のように「商品ID」「商品名」「カテゴリ」「在庫数」という4つの項目名のリストを作成しておきます。

シートを作成する

①もう一つシートを作成してシート名に「入出庫履歴」と入力します。

1行目に「日時」「商品ID」「商品名」「カテゴリ」「入出庫」「数量」「在庫数」の7つの項目名を入力しておきます。

Visual Basicを選択する

次にマクロを設定します。

「開発」タブ、②「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を入力する

入庫を記録するダイアログボックスが表示されます。

入庫する商品ID(例:18)を入力し、②「OK」ボタンを押します。

入庫数を入力する

①次に入庫する数量(例:3)を入力し、②「OK」ボタンを押します。

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を入力する

物品を登録できるダイアログボックスが表示されます。

「商品ID」を入力して、②「OK」ボタンを押します。

商品名を入力する

「商品名」を入力して、②「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」ボタンを押すと、ダイアログボックスが閉じます。