【Excel でログイン管理】複数ID・パスワード登録とログイン履歴でセキュリティ強化|Excelトラブル110番 #03

スポンサーリンク
Excelの部屋
うっしー
うっしー

この記事は、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 の弱点は“仕組み”で補えるから、チームで共有しても安全に運用できます。

コメント