【総務担当者が3年使い続けた】備品管理Excelテンプレートと運用を続ける設計方法|無料

備品管理をExcelでしてるけど、共有が難しいし、引き継ぎもうまくいかない。作った人はもういない…。どうしたらいいのか。

「この台帳、誰かが作ったんですが、もう誰も更新してないんですよね」

総務を担当して間もない頃、前任者から引き継いだ「備品管理」のExcelを開いたら最終更新日が3年前でした。記録されているのに実物はなく、パソコンは5台多い。これが「備品管理の崩壊」です。

なぜ崩壊するかはわかっています。
「テンプレートを作っただけで、運用の設計をしていなかったから」です。

この記事では、

  • Excelで備品管理をする方法
  • VBAで効率化する方法
  • Pythonへ進化させる方法

を紹介します。

ただしテンプレートの項目説明だけで終わる記事にはしません。
「なぜその項目が必要か」「どうすれば3年後も続けられるか」まで書きます。


結論|一番重要なのは「設計」

備品管理Excelで大事なのは「テンプレートの完成度」より「続けられる設計」。

いわゆるルール作成です。

  • 台帳シート:品名・管理番号・保管場所・数量・状態をプルダウン入力
  • 条件付き書式:残量が少ない備品を自動で色付き表示
  • 持ち出し管理シート:誰がいつ借りて、まだ返ってきていないかを1枚で把握
  • 棚卸しシート:VBAで台帳から自動生成。棚卸し確認が1クリックで完了
  • 運用ルール3点:入力タイミング・担当者変更時の引き継ぎ・年1回の棚卸し

備品管理が崩壊する3つのパターン——総務担当者の実体験

①「誰かが更新するだろう」問題

台帳を共有フォルダに置いただけで「みんなが更新する」ルールにしてしまうと、誰も更新しません。新しい備品を購入したとき・廃棄したとき・移動したとき、誰が記録するかが明確でないと台帳は必ず古くなります。

解決策: 入力のタイミングを「購入伝票を処理するときに必ず台帳も更新する」という業務フローに組み込む。

②「担当者しか知らない」問題

前任者が独自に作った台帳は、引き継ぎのときに意味がわからないことがあります。「N」が何を意味するかわからない、保管場所のコードが一覧にない、など。

解決策: 入力はすべてプルダウンから選択式にする。フリーテキスト入力は最小限に。そうすることで入力される値を固定することができます。

③「棚卸しをする気にならない」問題

年1回の棚卸しが苦痛な理由は「台帳と現物の照合が手作業だから」です。印刷して現場に持っていって、チェックして、差異を手入力して……これを毎年やるのは消耗します。

解決策: VBAで棚卸しチェックシートを自動生成する。台帳の項目を自動転記し、現地での確認結果だけを入力する形に変える。


だいたいの現場が、何かミスがあると「今後はExcelに記録していく」ってルールになりがちです。シンプルなのですが、「管理は誰か、どこにおく、データ整理はどうする」などまで議論されているのは聞いたことがありません。

この議論されていない部分が、後々爆弾になっていくのです。

備品管理Excelに最低限必要な項目と設計の考え方

必須項目チェックリスト

項目必要理由
管理番号品名が重複する場合(ノートPC×10台など)に個体識別が必要
品名検索しやすい表記を統一する
分類OA機器・家具・消耗品など。フィルタで絞り込みに使う
保管場所フロア・キャビネット番号まで記載すると棚卸し時に役立つ
数量消耗品は在庫数、固定資産は台数
状態使用中・保管中・修理中・廃棄済みをプルダウン管理
購入日耐用年数の計算・廃棄判断に使う
購入価格固定資産管理との連携用(10万円以上の備品は特に重要)
担当部署複数部署がある場合、誰の備品かを明示
備考シリアル番号・保証期限など

入れなくてよい項目

  • 「前回確認日」(棚卸しシートで管理するため台帳には不要)
  • 「購入先」(必要になったとき伝票を見ればよい)
  • 詳細すぎるスペック(型番があれば十分)

シンプルにすることが「続く設計」の第一歩です。


Excel関数で実用性を上げる

条件付き書式で残量わずかを自動表示

消耗品の在庫が設定数量を下回ったら自動でセルを赤くする設定です。

  1. 数量列(例:E列)を選択
  2. 「ホーム」→「条件付き書式」→「セルの強調表示ルール」→「指定の値より小さい」
  3. 「3」(または自社の発注タイミング)を入力、書式を「赤い塗りつぶし」に設定

これで在庫が3個を切った備品が自動的に赤くなります。毎朝台帳を開いたとき、赤い行があればすぐ発注。これだけで発注モレが劇的に減ります。

プルダウンリストで入力ミスをゼロにする

分類・保管場所・状態などはプルダウンから選択式にします。

  1. 入力規則を設定したいセル(例:C列「分類」)を選択
  2. 「データ」→「データの入力規則」→「設定」タブ
  3. 「入力値の種類」を「リスト」に変更
  4. 「元の値」に選択肢を入力(例:OA機器,家具,消耗品,その他

保管場所も同様にプルダウン化すると、「第1倉庫」「倉庫1」「倉庫1(全角)」といった表記ゆれがなくなり、フィルタで正確に絞り込めます。

VLOOKUPで管理番号から自動入力

他のシート(発注管理など)から管理番号を参照して品名を自動入力するときに使います。

=IFERROR(VLOOKUP(A2, 備品台帳!A:B, 2, FALSE), "")

A2に管理番号を入れると、備品台帳シートから品名を自動取得します。


持ち出し・返却管理シートの設計

備品の持ち出し管理は別シートで行います。「誰がいつ借りて、まだ返ってきていないか」を1枚で把握できる設計にします。

持ち出し管理シートの項目

項目内容
持ち出し日日付入力
管理番号台帳から選択(プルダウン連動可)
品名VLOOKUPで自動入力
持ち出し者氏名または社員番号
持ち出し理由外出先使用・テレワーク・貸出など
返却予定日入力任意
返却日返却時に入力
状態未返却・返却済みをプルダウン

条件付き書式で未返却を色付き表示

返却日が空白で持ち出し日から7日以上経過している行を黄色にする設定:

  1. 返却日列(H列)を含む行全体を選択
  2. 「条件付き書式」→「新しいルール」→「数式を使用して書式設定するセルを決定」
  3. 数式:=AND($H2="",$A2<TODAY()-7) を入力
  4. 書式:黄色の背景色を設定

これで「1週間以上返ってきていない備品」が一目でわかります。

年次棚卸しをVBAで効率化する

毎年の棚卸し作業をラクにするVBAコードです。備品台帳から棚卸し確認シートを自動生成します。

VBAコード(コピペOK)

Alt + F11 でVBAエディタを開き、「挿入」→「標準モジュール」で貼り付けてください。

Sub 棚卸しシート自動生成()

    Dim ws台帳 As Worksheet
    Dim ws棚卸し As Worksheet
    Dim 最終行 As Long
    Dim i As Long
    Dim シート名 As String

    Set ws台帳 = ThisWorkbook.Sheets("備品台帳")

    ' 棚卸しシート名(例:2026年度棚卸し)
    シート名 = Format(Now(), "YYYY") & "年度棚卸し"

    ' 既存のシートを削除して再作成
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Sheets(シート名).Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    ' 新しいシートを追加
    ThisWorkbook.Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Set ws棚卸し = ActiveSheet
    ws棚卸し.Name = シート名

    ' ヘッダー作成
    ws棚卸し.Cells(1, 1).Value = "管理番号"
    ws棚卸し.Cells(1, 2).Value = "品名"
    ws棚卸し.Cells(1, 3).Value = "分類"
    ws棚卸し.Cells(1, 4).Value = "保管場所"
    ws棚卸し.Cells(1, 5).Value = "台帳数量"
    ws棚卸し.Cells(1, 6).Value = "実数量"
    ws棚卸し.Cells(1, 7).Value = "差異"
    ws棚卸し.Cells(1, 8).Value = "状態確認"
    ws棚卸し.Cells(1, 9).Value = "備考"

    ' ヘッダーを太字・背景色
    ws棚卸し.Range("A1:I1").Font.Bold = True
    ws棚卸し.Range("A1:I1").Interior.Color = RGB(189, 215, 238)

    ' 台帳から廃棄済み以外のデータを転記
    最終行 = ws台帳.Cells(Rows.Count, 1).End(xlUp).Row

    Dim 出力行 As Long
    出力行 = 2

    For i = 2 To 最終行
        ' 状態列(F列)が「廃棄済み」でない行だけ転記
        If ws台帳.Cells(i, 6).Value <> "廃棄済み" And ws台帳.Cells(i, 1).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  ' 保管場所
            ws棚卸し.Cells(出力行, 5).Value = ws台帳.Cells(i, 5).Value  ' 台帳数量
            ' 差異の数式
            ws棚卸し.Cells(出力行, 7).Formula = "=F" & 出力行 & "-E" & 出力行
            出力行 = 出力行 + 1
        End If
    Next i

    ' 列幅自動調整
    ws棚卸し.Columns("A:I").AutoFit

    MsgBox 出力行 - 2 & "件の棚卸しシートを作成しました:「" & シート名 & "」", vbInformation

End Sub

使い方

  1. 普段の台帳シート名を「備品台帳」にしておく(または3行目の "備品台帳" を自社のシート名に変更)
  2. Alt + F8 → 「棚卸しシート自動生成」を実行
  3. 年度名のシートが自動生成される
  4. 印刷して現場に持っていき、「実数量」と「状態確認」だけを記入
  5. 戻ってきたら「差異」列で不一致箇所を確認

廃棄済みの備品は棚卸しシートに含まれないので、確認対象を絞り込めます。

PythonでExcel備品管理をさらに自動化する

VBAでExcel内の操作は自動化できました。
次にPythonを使うと「Excelの外」まで自動化できます。

Pythonの強みは定期自動実行・メール送信・複数ファイルの一括処理です。

VBAはExcelを開かないと動きませんが、Pythonはバックグラウンドで自動実行できます。

ここでは、備品管理で実際に使える3つのコードを紹介します。コピペして数行変更すれば動きます。

①在庫わずか備品をExcelから自動抽出する

備品台帳(Excelファイル)を読み込み、在庫が設定数を下回っている備品だけをリスト化して別ファイルに出力します。

import pandas as pd

# 備品台帳を読み込む
df = pd.read_excel("備品台帳.xlsx", sheet_name="備品台帳")

# 数量が3以下の備品を抽出(閾値は自社に合わせて変更)
threshold = 3
low_stock = df[df["数量"] <= threshold][["管理番号", "品名", "分類", "保管場所", "数量"]]

# 結果を確認
print(f"発注が必要な備品:{len(low_stock)}件")
print(low_stock.to_string(index=False))

# 結果をExcelに保存
low_stock.to_excel("発注リスト.xlsx", index=False)
print("発注リスト.xlsxを出力しました")

実行結果:「発注が必要な備品:5件」のようにリストが出力され、発注リスト.xlsx として保存されます。

必要なライブラリ: pip install pandas openpyxl

②在庫アラートをメールで自動送信する

在庫が少ない備品が見つかったら、担当者にメールで通知します。Windowsのタスクスケジューラーで毎週月曜の朝に自動実行すると、発注確認が完全自動化できます。

import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 設定(自社に合わせて変更)
EXCEL_PATH = "備品台帳.xlsx"
THRESHOLD = 3
FROM_EMAIL = "soumu@example.com"
TO_EMAIL = "tanto@example.com"
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
APP_PASSWORD = "your_app_password"  # Gmailのアプリパスワード

# 在庫わずか備品を抽出
df = pd.read_excel(EXCEL_PATH, sheet_name="備品台帳")
low_stock = df[df["数量"] <= THRESHOLD][["管理番号", "品名", "数量"]]

if len(low_stock) == 0:
    print("発注が必要な備品はありません")
else:
    # メール本文を作成
    body = f"【備品発注アラート】在庫わずか備品:{len(low_stock)}件\n\n"
    body += low_stock.to_string(index=False)
    body += "\n\n※このメールは自動送信されています"

    # メール送信
    msg = MIMEMultipart()
    msg["From"] = FROM_EMAIL
    msg["To"] = TO_EMAIL
    msg["Subject"] = f"【備品発注アラート】{len(low_stock)}件の備品が在庫わずかです"
    msg.attach(MIMEText(body, "plain", "utf-8"))

    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()
        server.login(FROM_EMAIL, APP_PASSWORD)
        server.send_message(msg)

    print(f"{len(low_stock)}件の発注アラートを送信しました")

VBAのメール送信はOutlookが必要ですが、PythonはGmailなど汎用メールサービスで動作します。

③棚卸し差異レポートを自動生成する

現地で数えた実数量(CSVやExcel)と台帳の数量を比較して、差異レポートを自動生成します。手作業での照合が不要になります。

import pandas as pd
from datetime import datetime

# 台帳データを読み込む
df_master = pd.read_excel("備品台帳.xlsx", sheet_name="備品台帳")
df_master = df_master[["管理番号", "品名", "数量"]].rename(columns={"数量": "台帳数量"})

# 現地確認データを読み込む(現場でCSV入力した場合)
df_actual = pd.read_csv("実数量.csv")  # 列:管理番号, 実数量

# 台帳と実数量を結合
df_diff = pd.merge(df_master, df_actual, on="管理番号", how="left")
df_diff["差異"] = df_diff["実数量"] - df_diff["台帳数量"]

# 差異がある備品だけ抽出
df_diff_only = df_diff[df_diff["差異"] != 0].copy()

# 結果をExcelに出力
today = datetime.now().strftime("%Y%m%d")
output_path = f"棚卸し差異レポート_{today}.xlsx"
df_diff.to_excel(output_path, index=False)

print(f"棚卸し差異レポートを出力しました:{output_path}")
print(f"差異あり:{len(df_diff_only)}件")
if len(df_diff_only) > 0:
    print(df_diff_only.to_string(index=False))

現場担当者がスマホからCSVに実数量を入力→Pythonを実行→差異レポートが自動生成、という流れにすると棚卸し作業が大幅に楽になります。

VBAとPython、どちらを使うべきか

用途VBAPython
Excel内の操作・自動化◎ 得意○ 可能(要ライブラリ)
定期自動実行△ 設定が複雑◎ タスクスケジューラーと相性◎
メール自動送信△ Outlookが必要◎ Gmail等でも動作
複数Excelの一括処理△ ファイルを開く必要あり◎ バックグラウンドで処理
導入ハードル◎ Excel内で完結△ Pythonインストールが必要

結論:まずはVBAでExcel内の操作を自動化、定期実行やメール通知が必要になったらPythonへ移行するのがおすすめです。どちらか一方を選ぶ必要はありません。


よくある質問

Q. 備品管理台帳のシートはいくつ必要ですか?

最低2シートあれば十分です。「備品台帳」(固定資産・備品)と「消耗品在庫」を分けて管理するか、1シートに統合して分類プルダウンで区別するかは会社の規模によります。20人以下の会社なら1シートで十分です。

Q. 管理番号はどうやって付けますか?

「分類コード+連番」が実用的です。例:PC001、PC002、FURN001など。大事なのは「一度使った番号は廃棄後も再利用しない」こと。番号が重複すると過去の台帳と照合するときに混乱します。

Q. 棚卸しはどれくらいの頻度でやればいいですか?

備品(固定資産)は年1回、消耗品は四半期または月1回が目安です。ただし、保管場所ごとに担当者を決めて「月1回の確認」を運用に組み込む方が、年1回の大規模棚卸しより実態に近い管理になります。

Q. 10万円以上の備品は別管理が必要ですか?

はい。税法上、10万円以上の備品は固定資産として減価償却の管理が必要です。固定資産台帳は会計ソフトや経理と連携して管理します。ExcelのExcel備品管理台帳は「どこに何があるか」という現物管理が目的なので、固定資産台帳と連動させる必要は必ずしもありません。ただし管理番号を統一しておくと照合が楽になります。

Q. Excelの台帳を複数人で同時に編集できますか?

Excelの「共有ブック」機能か、OneDrive・SharePointに保存して共同編集する方法があります。ただし、複数人が同時に更新すると競合が起きやすいため、「入力担当者を1人に絞る」または「入力シートと閲覧シートを分ける」運用の方が長続きします。


Excelが限界になるタイミングと次のステップ

Excelの備品管理は「正直に言うと」どこかで限界が来ます。
その目安を書いておきます。

Excelで対応できる範囲:
– 備品数が300件以下
– 管理担当者が1〜2名
– 同時編集が不要

Excelが厳しくなってくるケース:
– 備品が300件を超えて台帳が重くなる
– 複数拠点の在庫を統合管理したい
– スマートフォンからバーコードで入力したい
– システム監査や固定資産管理との完全連携が必要

小規模(20〜50人)の会社なら、Excelでの備品管理は十分に機能します。「まず動かせる仕組みを作って、運用が定着してから次のステップを検討する」という順番で問題ありません。

総務業務の自動化事例——実際にやってみた話


まとめ

  • 台帳設計: 必須項目を絞り、プルダウン入力で表記ゆれをなくす
  • 条件付き書式: 消耗品の残量わずかを自動色付き表示で発注モレ防止
  • 持ち出し管理: 別シートで「未返却」を可視化
  • 棚卸し自動化: VBAで棚卸しシートを1クリック生成
  • Python自動化: 在庫抽出・メールアラート・差異レポートをバックグラウンドで処理
  • 続く運用: 購入伝票処理のタイミングに台帳更新を組み込む

「テンプレートを作って終わり」ではなく、「3年後も更新されている台帳を作る」ことを目指してください。最初から完璧な台帳を作る必要はありません。シンプルに始めて、使いながら育てる設計の方が長続きします。

備品管理が整理できたら、次は総務業務全体の効率化を考える段階です。

総務DX、何から始める?
総務の業務改善アイデア10選
総務・DX経験を転職でアピールしたい方はこちら


この記事は、総務部での実務経験をもとに執筆しています。備品管理台帳を一から設計・運用した経験から、実際に続く設計方法を書いています。