ADHDビルメンの資格ログ

いろいろな資格取得を目指しています。

あわせて読みたい

ビルメンの仕事内容・実務・資格まとめ

ビルメンの仕事の全体像(点検・修繕・トラブル対応)や、現場で役立つ実務ノウハウ、資格の話をまとめています。

まとめページはこちら

消防設備士|合格体験・問題傾向まとめ

消防設備士の合格体験談や、試験で出やすい問題傾向、勉強の進め方をまとめています。

まとめページはこちら

ADHD×仕事|苦労したこと・工夫・過去の話

私がADHDで苦労したこと、仕事で工夫していること、これまでの経験談をまとめています。

まとめページはこちら


Excel VBAで修繕履歴を検索する方法|設備管理で使える台帳の作り方

 

「修繕履歴が増えてきて、過去の対応を探すのに時間がかかる…」設備管理(ビルメン)の現場ではよくある悩みです。紙やExcelのメモが散らばっていると、いざという時に「前回どう直したか」「どの業者に頼んだか」「費用はいくらだったか」がすぐ出てきません。

この記事では、Excel初心者でも作れる「修繕履歴台帳+検索画面+結果出力」を、VBA(マクロ)で実現する手順をまとめます。 ゴールはシンプルに、検索欄にキーボードで入力 → 検索ボタンを押す → 結果シートに一覧です。

実際に作って運用してみると、検索がスムーズになり、現場の“探す時間”がかなり減ります。まずは小さく作って、必要に応じて育てていきましょう。



結論:Excelマクロで修繕履歴検索は可能(初心者でもOK)

結論から言うと、ExcelのVBA(マクロ)で修繕履歴を検索して一覧表示する仕組みは作れます

特に現場で便利なのは次の検索です。

  • 発生日で期間検索(いつ頃の不具合だったか)
  • 設備名・場所で検索(どの設備の履歴か)
  • キーワード検索(漏水/異音/停止など、文言から探す)
  • 状態で抽出(未対応だけ、完了だけ など)

修繕履歴を「検索できる形」で残しておくと、問い合わせ対応の速度再発時の判断引継ぎがかなり楽になります。

そして、作り方のコツは難しいVBAよりも先に、台帳(データ)の形を整えることです。

今回、作成するのはこのような形式となっております。

①修繕履歴を普段からこのように入力したとします。

②「検索」シートに移動して、キーワードを好きなところに入力して「検索」ボタンをクリックすると検索結果が出てきます。

③「結果」シートをクリックして、見るとこのように出てきます。


最初に作るべき「修繕履歴台帳」の型(1行=1件)

最短で成功するための大原則は、1行=1件です。

「一つの修繕を複数行に分ける」「セル結合が多い」「見出しが途中に何度も出てくる」などの形だと、検索は一気に難しくなります。

今回の台帳は、次の列(見出し)を用意しました。現場でよく使う項目に絞っています。

  • 管理番号
  • 発生日
  • 設備名
  • 場所
  • 不具合内容
  • 対応内容
  • 業者名
  • 費用
  • 状態(未対応/対応中/完了)
  • 完了日
  • 備考

ポイントは、表記ゆれを減らすことです。例えば「状態」が「完了」「完了済」「済」などバラバラだと検索漏れが出ます。

最初から「未対応/対応中/完了」の3つに固定しておくと、後々かなり効きます。


検索シート/結果シートの作り方(入力→ボタン→出力)

台帳(修繕履歴)だけだと、毎回フィルターを触ったり、探したりで手間がかかります。

そこで、次の3シート構成にします。

  • 修繕履歴:データ入力用(台帳)
  • 検索:条件入力+検索ボタン
  • 結果:抽出結果の一覧表示

検索シートの入力欄は、次のような形にしておくと分かりやすいです(空欄は「条件なし」扱い)。

  • 開始日(発生日)
  • 終了日(発生日)
  • 設備名
  • 場所
  • キーワード(不具合/対応/備考)
  • 状態(未対応/対応中/完了)

この構成にすると、運用がとても単純になります。

「検索欄に入力→検索ボタン」で毎回結果が更新されるので、誰でも同じ手順で使えます。


VBAコード(コピペで動く修繕履歴検索)

ここからがVBA(マクロ)です。やることは次の3つだけ。

  1. 検索シートの条件(B2~B7)を読む
  2. 修繕履歴を上からチェックして、条件に合う行だけ拾う
  3. 結果シートに一覧で貼り付ける

前提:シート名は必ず次の3つに揃えてください(完全一致)。

  • 修繕履歴
  • 検索
  • 結果

VBEの開き方:Excelで Alt + F11 → 挿入 → 標準モジュール → 下のコードを貼り付けます。


Option Explicit

Public Sub 修繕履歴_検索()

    Dim wsD As Worksheet, wsQ As Worksheet, wsR As Worksheet
    Set wsD = ThisWorkbook.Worksheets("修繕履歴")
    Set wsQ = ThisWorkbook.Worksheets("検索")
    Set wsR = ThisWorkbook.Worksheets("結果")

    Dim lastRow As Long, lastCol As Long

    '発生日(B列=2)を基準に最終行を取得
    lastRow = wsD.Cells(wsD.Rows.Count, 2).End(xlUp).Row
    lastCol = wsD.Cells(1, wsD.Columns.Count).End(xlToLeft).Column

    If lastRow < 2 Then
        MsgBox "修繕履歴にデータがありません。", vbExclamation
        Exit Sub
    End If

    '--- 検索条件(空欄は条件なし)
    Dim dFrom As Variant, dTo As Variant
    dFrom = wsQ.Range("B2").Value
    dTo = wsQ.Range("B3").Value

    Dim equip As String, place As String, kw As String, st As String
    equip = Trim(CStr(wsQ.Range("B4").Value))
    place = Trim(CStr(wsQ.Range("B5").Value))
    kw = Trim(CStr(wsQ.Range("B6").Value))
    st = Trim(CStr(wsQ.Range("B7").Value))

    '--- 結果シート初期化+見出しコピー
    wsR.Cells.Clear
    wsD.Range(wsD.Cells(1, 1), wsD.Cells(1, lastCol)).Copy _
        Destination:=wsR.Cells(1, 1)

    Dim outRow As Long
    outRow = 2

    Dim r As Long

    For r = 2 To lastRow

        Dim ok As Boolean
        ok = True

        ' 発生日(B列=2列目)で期間判定
        Dim dOccur As Variant
        dOccur = wsD.Cells(r, 2).Value

        If Not IsEmpty(dFrom) Then
            If Not IsDate(dOccur) Or CDate(dOccur) < CDate(dFrom) Then
                ok = False
            End If
        End If

        If ok And Not IsEmpty(dTo) Then
            If Not IsDate(dOccur) Or CDate(dOccur) > CDate(dTo) Then
                ok = False
            End If
        End If

        ' 設備名(C列=3列目)部分一致
        If ok And equip <> "" Then
            If InStr(1, CStr(wsD.Cells(r, 3).Value), equip, vbTextCompare) = 0 Then
                ok = False
            End If
        End If

        ' 場所(D列=4列目)部分一致
        If ok And place <> "" Then
            If InStr(1, CStr(wsD.Cells(r, 4).Value), place, vbTextCompare) = 0 Then
                ok = False
            End If
        End If

        ' 状態(I列=9列目)完全一致
        If ok And st <> "" Then
            If CStr(wsD.Cells(r, 9).Value) <> st Then
                ok = False
            End If
        End If

        ' キーワード:不具合内容(E=5)・対応内容(F=6)・備考(K=11)
        If ok And kw <> "" Then

            Dim hit As Boolean
            hit = False

            If InStr(1, CStr(wsD.Cells(r, 5).Value), kw, vbTextCompare) > 0 Then hit = True
            If InStr(1, CStr(wsD.Cells(r, 6).Value), kw, vbTextCompare) > 0 Then hit = True
            If InStr(1, CStr(wsD.Cells(r, 11).Value), kw, vbTextCompare) > 0 Then hit = True

            If Not hit Then ok = False

        End If

        ' 条件に合う行を結果へコピー
        If ok Then

            wsD.Range(wsD.Cells(r, 1), wsD.Cells(r, lastCol)).Copy _
                Destination:=wsR.Cells(outRow, 1)

            outRow = outRow + 1

        End If

    Next r

    wsR.Columns.AutoFit

    MsgBox "検索完了:" & (outRow - 2) & "件", vbInformation


End Sub

検索ボタン(図形)を作って右クリックし、「マクロの登録」で 修繕履歴_検索 を割り当てれば完成です。

手順①「開発」をクリックする。

手順②「挿入」→「ボタン」をクリックする。

③ボタンを設置したい箇所にクリック→「修繕履歴_検索」をダブルクリック→「OK」をクリック

④ボタンの名前を変更する場合は、一旦右クリックしてから、ボタンを押せば、中身の文字を変更することができます。「ボタン」→「検索」

⑤キーワードを入力してボタンをクリックすれば、検索結果が出てきます



よくあるエラーと解決策(実行時エラー9/シート名問題)

実行時エラー '9':インデックスが有効範囲にありません

ほとんどの場合、VBAが探している「シート名」が一致していません。

たとえば、データが入っているのが「Sheet1」のままだと、VBAが「修繕履歴」を見に行って空っぽ→エラーや「データがありません」になります。

対策:シート名を次の3つに完全一致させます(全角/半角、スペースも一致が必要)。

  • 修繕履歴
  • 検索
  • 結果

「履歴」は予約語でシート名に使えない

Excelでは「履歴」という名前が予約語扱いになり、シート名に設定できないことがあります。

この場合は、修繕履歴など別名にして、VBAの Worksheets("修繕履歴") と一致させてください。

Excelの警告:『履歴』は予約語のためシート名に使用できません


日付以外でも検索できる?(設備名・場所・キーワード・状態)

日付(開始日・終了日)を入れなくても、検索できます。理由はシンプルで、空欄は「条件なし」として扱う作りだからです。

  • 設備名だけ入力:設備名(列C)に入力文字が含まれる行を抽出(部分一致)
  • 場所だけ入力:場所(列D)に入力文字が含まれる行を抽出(部分一致)
  • キーワードだけ入力:不具合内容(E)/対応内容(F)/備考(K)のどれかに含まれる行を抽出
  • 状態だけ入力:状態(I)が一致する行を抽出(完全一致)

状態は完全一致なので、運用上は「未対応/対応中/完了」で表記を固定するのがコツです。

もし「完了」と入力して出ない時は、セルに余計なスペースが入っていないかも確認すると早いです。


キーボード入力→検索ボタンで運用するコツ

現場運用としては、次の流れにすると迷いません。

  1. 「検索」シートを開く
  2. 条件をキーボードで入力(必要な項目だけ)
  3. 検索ボタンを押す
  4. 「結果」シートで一覧を確認

件数が増えてきたら、さらに便利にする改善もできます。

  • 設備名・場所・状態をプルダウン化して表記ゆれを減らす
  • 結果シートに「件数」「費用合計」を表示する
  • 月別の件数・費用を集計して報告書に使う

ただ、最初から全部盛りにすると挫折しやすいので、まずは今回の形で「検索ができる」状態にするのが正解です。

ビルメン業務への横展開(点検・不具合受付・期限管理)

この仕組みは修繕履歴だけでなく、ビルメン業務の台帳にも横展開できます。

基本は同じで、1行=1件の台帳にして、検索条件(列)を差し替えるだけです。

  • 点検記録:点検日/設備/場所/点検者/結果(OK/NG)/指摘/是正期限/完了日
  • 不具合・故障受付:受付日/設備/場所/内容/緊急度/対応者/状態/完了日
  • 法定点検・期限管理:設備/点検種別/周期/前回日/次回期限/業者/実施日

「探せる台帳」ができると、問い合わせ対応や引継ぎが楽になり、結果的に現場全体の質が上がります。

必要になったタイミングで、少しずつ機能を足していくのがおすすめです。


まとめ:まずは“使える台帳”を作って育てる

修繕履歴の検索をExcelマクロで作るときの要点は次の3つです。

  • 台帳は1行=1件で作る
  • 「検索」シートと「結果」シートを分けて運用を簡単にする
  • つまずいたらシート名の不一致を最優先で疑う

最初の一歩としては十分実用的です。

あとは現場の使い方に合わせて、「費用合計」「月別集計」「印刷用の整形」などを追加すれば、さらに強い台帳になります。

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

関連記事

www.birumen-life.com

www.birumen-life.com

www.birumen-life.com

www.birumen-life.com