
この記事は、Excel で業務効率化ツールを作成・運用している際に発生したトラブルと、その解決策をまとめたシリーズ記事です。
今回起こったトラブルは……「Excel データが、意図しない形で書き換えられていた」というもの。
私は、業務効率化ツールを院内の共有フォルダに置いて作成・運用しています。
その理由は、院内の全ての PC からアクセスできるという大きなメリットがあるからです。
しかしその反面、「誰でも開けてしまう」「誰がいつ操作したのか分からない」 というデメリットがあります。
実際、患者さんや職員の情報を扱う業務効率化ツールで、「気づいたらデータが書き換わっていた」「業務時間外に操作された形跡がある」といったトラブルが散見されました。

私の職場では、無関係な部署の人が開いていたり、患者の振り分けを自分の都合のいいように書き換えていた人がいたのよ。

そんなことがあったんだ。
Excel の標準機能でパスワードを設定することはできるけど、パスワードは1つしか設定できないんだよね。

パスワードが1つだと、“全員が同じ鍵を持っている”のと同じ状態だから、誰がいつ Excel のデータを変更したのかまでは分からないわね…。
そこで役立つのが、Excel に複数のID・パスワードを登録し、ログイン履歴を記録する仕組みです。
これを導入すれば、「誰が」「いつ」操作したのかを把握でき、Excel ファイルの共有運用の弱点を補うことができます。
この記事では、Excel だけで実現できるログイン管理の仕組みと、ID・パスワード管理、ログイン履歴の取得方法を分かりやすく解説します。
【この記事で分かること】
- Excel ブックのセキュリティ対策
- Excel で複数のID・パスワードを設定する方法
- ID・パスワードの管理方法
- ログイン履歴の取得方法
【症状】誰がいつ操作したか分からず、データの変更に気づけない

使っていた業務効率化ツールはこちらです。
院内の共有フォルダに置いた Excel ツールは、どの PC からでも誰でもアクセスできるため、「誰がいつ操作したのか分からない」という大きな問題を抱えています。
この状態では、セキュリティ上の問題に加え、データに変更が加えられても、その変更に気づくことができず、次のようなトラブルが散見されていました。
- 無関係な部署の人が開いている
- 担当者名が変わっている
- 業務時間外に操作された形跡がある
- 個人の都合で患者の振り分けが変更されている
- 変更した人が特定できず、責任の所在が曖昧になる
共有フォルダは便利な反面、アクセス権が広く、Excel 側では利用者を識別できないため、誤操作・勘違い・意図しない上書きといった“気づきにくい変更”が発生しても、その原因を追跡することができません。

あきらかに、”自分が楽をするため”に患者の振り分け先を変更している職員がいると分かった時は、開いた口がふさがらなかったわ。

どの PC からでも、誰でも開けるというメリットを逆手にとられてしまったケースだね。
このように、“誰がいつ操作したか分からず、データの変更に気づけない”というのが、今回のトラブルの特徴です。
【原因】Excel 標準のパスワード機能では利用者を識別できない
今回のトラブルの根本原因は、Excel の標準機能では「利用者を識別する仕組みが存在しない」 という点にあります。
Excel にはブックを開くためのパスワードを設定できますが、設定できるパスワードは1つのみになります。
セキュリティ強化にはなりますが、複数人で共有している場合、全員が同じパスワードを使うことになり、“誰が開いたのか” を区別することができません。

セキュリティ面については、業務効率化ツールに Excel 標準のパスワードすらかけていなかった、私の不徳の致すところです。

でも、今回解説するログインの設定で問題は解決したから、ホントに助かったわ。
【理由】Excel は共有運用に弱い面がある
Excel は「個人利用」を前提としたアプリなので、複数ユーザーのログイン管理や履歴管理を想定していません。
そのため、複数人で同じファイルを運用する場合は、今回のようなトラブルが起きやすい構造になっています。
【対処法】複数の ID・パスワードを登録し、ログイン管理する

今回のトラブルを防ぐためには、不特定多数の人が開ける状態を解決する必要があります。
Excel の標準機能では利用者を識別できませんが、VBA を使うことで次のようなログイン管理の仕組みをつくることができます。
- 複数の ID・パスワードを登録
- ID・パスワードを入力してファイルを開く
これにより、共有フォルダで Excel ファイルを運用しても、不特定多数の人が開ける状態を回避することができます。

それでは、その仕組みをどうやってつくるのか、「ID・パスワードの登録」と「ログイン管理」の方法について解説していきます。
ID・パスワードの登録
ID・パスワードを登録するシートの作成
シート名を「ログイン情報」とし、ID・パスワードを管理するシートを以下のように作成します。

- A列:ID
- B列:パスワード
- C列:=A2&B2
- IDとパスワードを「&」で結合した結果を表示

ID・パスワードは「非表示」にし、「シートの保護(要パスワード入力)」で管理者以外は見れないようにしましょう。
後に紹介する VBA のコードでは、シートの保護のパスワードは「12345」に設定しています。

他の人に見られたら意味がないから、ログイン情報を非表示にしておくのは大事ね。
ID・パスワード登録用の マクロ を作成(任意)
ID・パスワードは、直接入力することもできますが、ID・パスワード登録用のマクロを作成することで、セキュリティと利便性の向上が図れます。
(「ID・パスワード登録」コードは、「標準モジュール」へコピーします。)
「ID・パスワード登録」コード
'【ID・パスワード登録】
Sub IDPassT()
Dim IDT As Variant
Dim PassT As Variant
Dim AllRow As Long
Dim LastRow As Long
Dim WSlog As Object
Set WSlog = Worksheets("ログイン情報")
'IDを入力
IDT = InputBox("IDを登録してください。")
'パスワードを入力
PassT = InputBox("パスワードを登録してください。")
'ID・パスワード一覧の最下段を探す
AllRow = ActiveSheet.Rows.Count
LastRow = WSlog.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row + 1
'IDが入力された時
If IDT <> "" Then
'シートの保護を解除
WSlog.Unprotect Password:="12345"
'ログイン情報のシートへID・パスワードを入力
WSlog.Cells(LastRow, 1) = IDT
WSlog.Cells(LastRow, 2) = PassT
'シートの保護を設定
WSlog.Protect Password:="12345"
'一番先頭のシートを選択
Worksheets(1).Select
Range("A1").Select
'Excelファイルの保存
ThisWorkbook.Save
'登録完了メッセージ
MsgBox "ID・パスワードを登録しました。"
'IDが入力されなかった時
Else
MsgBox "登録できませんでした。"
End If
End Sub

作成したマクロは、ボタンや図形に登録して使用すると便利ですよ。
ログイン管理
Excel ファイルを開いた際に、登録した ID・パスワードを入力するマクロを作成します。
(「ログイン管理」コードは、「ThisWorkbook」へコピーします。)
「ログイン管理」コード
Private Sub Workbook_Open()
Worksheets(1).Activate
Dim wsInfo As Worksheet
Dim wsLog As Worksheet
Set wsInfo = Worksheets("ログイン情報")
Set wsLog = Worksheets("ログイン履歴")
Dim ID As String
Dim Pass As String
'--- 入力 ---
ID = InputBox("IDを入力してください")
Pass = InputBox("パスワードを入力してください")
If Pass = "" Then
MsgBox "パスワードが確認できません。"
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
Exit Sub
End If
'--- 認証ロジック ---
' C列には「ID & パスワード」を連結した値が登録されている
Dim key As String
Dim matchCount As Long
key = ID & Pass
' COUNTIF で key を C列からカウント
matchCount = Application.WorksheetFunction.CountIf(wsInfo.Range("C:C"), key)
If matchCount = 1 Then
'--- ログイン成功 ---
' 必要にあわせて【ログイン履歴】コードを貼り付け
Worksheets(1).Activate
MsgBox "ログイン成功しました。"
Else
'--- ログイン失敗 ---
MsgBox "IDまたはパスワードが違います。"
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
End If
End Sub

入力されたID・パスワードが一致した時、Excel ファイルが開きます。
一致しない時は、Excel ファイルを閉じます。
「ログイン履歴」が必要な方は、次項の【再発防止策】ログイン履歴の記録をご参照ください。
【再発防止策】ログイン履歴の記録
ログイン履歴を記録するシートを作成
シート名を「ログイン履歴」とし、ログイン履歴を管理するシートを作成します。

「ログイン管理」コードの中に、「ログイン履歴」コードを追加します。
「ログイン履歴」コード
Dim lastRow As Long
lastRow = wsLog.Cells(wsLog.Rows.Count, 1).End(xlUp).Row + 1
wsLog.Unprotect Password:="12345"
wsLog.Cells(lastRow, 1).Value = lastRow - 1
wsLog.Cells(lastRow, 2).Value = Format(Now, "yyyy/mm/dd")
wsLog.Cells(lastRow, 3).Value = Format(Now, "hh:nn:ss")
wsLog.Cells(lastRow, 4).Value = ID
wsLog.Protect Password:="12345"

ログイン履歴は、「年月日」「時分秒」と「ID」が記録されるように設定しています。
【まとめ】Excel でも「誰が」「いつ」操作したかを見える化できる
共有フォルダで Excel を運用する場合、「誰でも」「どこでも」アクセスできる一方で、「誰がいつ操作したか分からない」という弱点があります。
Excel 標準のパスワードでは利用者を識別できないため、誤操作・意図しない変更・個人判断の書き換えが起きても、その原因を追跡することができません。
今回紹介したように、ID・パスワードを登録してログイン管理を行い、ログイン履歴を記録することで、Excel でもセキュリティの向上と利用者の見える化が可能になります。

ログイン履歴が残るようになってから、今回のようなトラブルがなくなったわ。

Excel の弱点は“仕組み”で補えるから、チームで共有しても安全に運用できます。






コメント