[[20231122102841]] 『機械管理簿のシートが多すぎて確認する手間を省き』(IRA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『機械管理簿のシートが多すぎて確認する手間を省きたい。』(IRA)

初めまして、Excel初心者です。

現在、職場で使っている機械を毎日動作確認するための管理簿
(同じフォーマット)があり、月末にシートを一括選択し、
月日の変更、印刷しているのですが、なにせ数が多く、
本当に変わっているのか一つ一つ確認しています。
(そもそも信じて印刷すればいいのでしょうが…)

これを一つのシートで完結させる方法はないでしょうか。

点検表はこんな感じです。


点検リスト   
      機器名  管理番号  点検年月
      ○○○  ○○○○  2023年 ○月

点検日       123456………31
点検項目
1電源入る     ☑☑…     …☑
2異音がしないか  ☑…      …☑
3オイル漏れはないか☑…
4などなど
・項目は機器ごとに変わり、最大15項目


15
                    承認者 検査員
                     印   印


こんな感じのフォーマットで、機器ごとに点検項目も変わります。

このフォーマット管理簿のシート一つ別で作成し、そのシートの管理番号を
データの入力規則等で変更したら、それに合わせて
機器名、点検項目が変わるような仕様にしたいのです。
また、年、月を変えれば日付も自動で変わるような仕様が理想です。
シートの移動をして確認する手間を省きたい事が一番の目的です。

その後、印刷ですべての機械分印刷なんてことは出来るのでしょうか。

いろいろ調べてはいるものの、日付変更はできそうなのですが、管理番号を変えればその機器名、点検項目が変わるといったものが見つからず、
(請求書で管理番号を変えれば、企業名、金額が変わるといったものはありましたが、方法が多すぎてどれがいいのかもわからず…)

そもそも出来るのか…すらもわかりません。

マクロ、VBA、関数いろいろな方法があると思うのですが
もしできるなら教えていただけませんでしょうか。

よろしくお願いいたします。

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


マスタシートを使用しても良ければ…

マスタシートに
管理番号の一覧とそれに付随する機器名
機器名とそれに付随する点検名 を記載しておいてVLOOKUPで呼び出すとかどうでしょう?

点検項目数のばらつきがあるなら、
=IF(VLOOKUP(【機器名のセル】,【マスタシートの点検項目一覧部分】,2【ここをずらしていく。最大16】,FALSE)=0,"",VLOOKUP(【最小のVlookupと同じ数式】))
にしておくと、ない項目は空白になります。
(質問) 2023/11/22(水) 12:06:04


月日の変更はなんのために必要ですか?
そのシートが月別なのであれば、月だけの変更になるかと思いますが?

それは複数あるシートの月を一つづつ変更しているということでしょうか?
そうであれば、1つシートを作って、月を入力し、
他のすべてのシートからそのセル(月)を参照してはどうでしょうか?

管理番号の入力により入力内容を変更するというのは、できるにしても大変だと思いますので、
管理番号の入力により、そのシートに飛ぶというのはどうでしょうか?

シートは管理番号別にできていると思いますので、シート名を管理番号にします。
その上で、以下のようなコードでジャンプできます。

Sub Jump()

    Application.Goto Worksheets(ActiveSheet.Cells(1, 1)).Cells(1, 1)
End Sub

A1に管理番号を入力し、となりにボタンでもつけて、上記コードを割り当ててはどうでしょうか?
(ゆたか) 2023/11/22(水) 12:44:06


ご返答ありがとうございます。

質問様
マスターシート利用してのVLOOKUPでの呼び出し、試してみます。
ありがとうございます。

ゆたか様
毎日動作チェックしてる為、月日は必要です。
ここについては、月を変えれば日が変わる設定が出来ました。

他のすべてのシートからの参照、頂いたコード、試してみます。ありがとうございます。

(IRA) 2023/11/22(水) 12:49:53


    'シートモジュール
    Dim 点検項目 As Object
    Const 機器名 As String = "機器A,機器B,機器C,機器D,機器E"
    Const 管理番号 As String = "番号1,番号2,番号3,番号4,番号5"

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, r1 As Range, i As Long
    On Error Resume Next
    If Target.Offset(-1).Value <> "管理番号" Then Exit Sub
    Set 点検項目 = CreateObject("Scripting.Dictionary")
    点検項目("機器A") = "1電源入る ,2異音がしないか,3オイル漏れはないか"
    点検項目("機器B") = "1電源入る ,2異音がしないか,3オイル漏れはないか,4ライトがついているか"
    点検項目("機器C") = "1異音がしないか,2オイル漏れはないか,3ライトがついているか,4温度は正常か,5湿度は適正か"
    点検項目("機器D") = "1ライトがついているか,2温度は正常か,3湿度は適正か"
    点検項目("機器E") = "1電源入る ,2異音がしないか,3オイル漏れはないか,4ライトがついているか,5温度は正常か,湿度は適正か"
    Set r = Cells.Find("機器名", , , xlWhole)
    Application.EnableEvents = False
    For i = 0 To UBound(Split(機器名, ","))
       If Target.Value = Split(管理番号, ",")(i) Then
           r.Offset(1).Value = Split(機器名, ",")(i)
            Set r1 = Cells.Find("点検項目", , , xlWhole)
            r1.Offset(1).Resize(15).ClearContents
            r1.Offset(1).Resize(UBound(Split(点検項目(Split(機器名, ",")(i)), ","))).Value = Application.Transpose(Split(点検項目(Split(機器名, ",")(i)), ","))
       End If
    Next i
    Application.EnableEvents = True
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    If Len(Cells.Find("管理番号", , , xlWhole)) * Len(Cells.Find("機器名", , , xlWhole)) * Len(Cells.Find("点検項目", , , xlWhole)) = 0 Then
    MsgBox "当シートに「管理番号」「機器名」「点検項目」の文言のセルがありませんのでキャンセルします": Exit Sub
    End If
    If Target.Offset(-1).Value <> "管理番号" Then Exit Sub
    With Target.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=管理番号
    End With
    End Sub

(mm) 2023/11/22(水) 14:00:53


Application.Goto Worksheets(ActiveSheet.Cells(1, 1)).Cells(1, 1)

こちらの式ですが、午前中には動作していた(はず)ですが、午後から動作しなくなりました(なんでやねん?)

Application.Goto Worksheets(ActiveSheet.Cells(1, 1).Value).Cells(1, 1)

としておきます。
(ゆたか) 2023/11/22(水) 14:24:44


ゆたか様

こちらも試してみます!
ありがとうございました!!!
(IRA) 2023/11/22(水) 17:06:45


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.